首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核代码中max和min宏的实现以及语句表达是({})的应用

Linux内核代码中有很多比较精巧的程序设计技巧,include/linux/kernel.h中实现max和min宏就是其中的一部分。...我们先来看一下普通的max和min一般怎么写: #define min(x,y) ((x)>(y)?(y):(x)) #define max(x,y) ((x)>(y)?...(x):(y)) 但这么写有一个小风险,请看以下调用: int x = 2;y = 1 printf("%d/n", max(x++, y++)); 调用结束后会发现,x被加了2,主要是因为max被展开后如下..._max1 : _max2; }) 这么做主要涉及以下几个知识点: 1、typeof(x) 找出x的数据类型 2、语句表达是({S1;S2;......;Sn;}) 总的语句表达是的值是Sn,这个技巧我之前写代码是也用到过,呵呵 3、(void) (&_x == &_y);的巧妙 这个主要是用来判断x,y数据类型是否一样,利用了编译器的一个小特性:不同数据类型的变量进行比较时会产生

1.5K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++ 初识

    ,集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套 调试器:可以观察程序的运行时行为并确定逻辑错误的位置 编辑器:一般是指用来修改电脑档案的编写软件,常见的编辑器有文本编辑器、网页编辑器...—— Compile Error代码 编辑器 Notepad2 注:编辑器也可以使用 Vim,便于以后移植到 Linux 平台 二、C++简介 C++ 是作为 C 语言的增强版出现,最初被称为 C with...,重要的是可移植性强,生成的代码质量高 类(Class):类是面向对象程序设计语言中的一个概念,它实际上是对某种类型的对象定义变量和方法的原型,它表示对现实生活中一类具有相同特征的事务的抽象,是面向对象编程的基础类的实质是一种数据类型...,就有具体的属性和具体的事件 三、总结 这篇文章只是简单介绍了 C++ 相关知识,程序的大致构成 o 程序开头包含相应头文件,头文件中提供程序所需要调用的系统库函数 注:在 5.0 之后的 Dev C+...+ 中,iostream 已经不包括 cstdio、cstring、cstdlib、algorithm等,其他常用的 min、max 函数也不包括 cstdio: getchar(), stdin, stdout

    53130

    解决C++代码单元测试中的难题-不可验证和IO调用

    在做C++程序的单元测试时,大家经常会遇到两个问题: 1.不方便验证测试结果,原因是因为不可访问保护和私有类成员 2.对于需要访问的connect、receive、send等不好绕过 这里介绍两种方法,...即可解决: 1.在编译单元测试代码时,加上UNIT_TEST宏(名字可以为其它你喜欢的),并将private定义成public,即: #define private public 这样就可以测试代码就可以随意访问类的任何成员了...,单元测试就是要做白盒测试,将内部看得清清楚楚 以前喜欢使用友元类的方式,但那需要在代码中安插测试代码,所以这个办法更好。...2.对于IO问题,只需要从被测试再继承一下,然后重实现(如果为虚拟,则为隐藏)相应的方法,改成方便验证的,这样问题也就好解决了。设计模式中的Decorator模式用在这里非常合适。

    50110

    解决C++代码单元测试中的难题-不可验证和IO调用

    原帖发表在Hadoop技术论坛 在做C++程序的单元测试时,大家经常会遇到两个问题: 1.不方便验证测试结果,原因是因为不可访问保护和私有类成员 2.对于需要访问的connect、receive、send...等不好绕过 这里介绍两种方法,即可解决: 1.在编译单元测试代码时,加上UNIT_TEST宏(名字可以为其它你喜欢的),并将private定义成public,即: #define private public...这样就可以测试代码就可以随意访问类的任何成员了,单元测试就是要做白盒测试,将内部看得清清楚楚 以前喜欢使用友元类的方式,但那需要在代码中安插测试代码,所以这个办法更好。...2.对于IO问题,只需要从被测试再继承一下,然后重实现(如果为虚拟,则为隐藏)相应的方法,改成方便验证的,这样问题也就好解决了。设计模式中的Decorator模式用在这里非常合适。

    51210

    自学C++基础知识

    ,集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套 调试器:可以观察程序的运行时行为并确定逻辑错误的位置 编辑器:一般是指用来修改电脑档案的编写软件,常见的编辑器有文本编辑器、网页编辑器...—— Compile Error代码 编辑器 Notepad2 注:编辑器也可以使用 Vim,便于以后移植到 Linux 平台 二、C++简介 C++ 是作为 C 语言的增强版出现,最初被称为 C with...,重要的是可移植性强,生成的代码质量高 类(Class):类是面向对象程序设计语言中的一个概念,它实际上是对某种类型的对象定义变量和方法的原型,它表示对现实生活中一类具有相同特征的事务的抽象,是面向对象编程的基础类的实质是一种数据类型...,就有具体的属性和具体的事件 三、总结 这篇文章只是简单介绍了 C++ 相关知识,程序的大致构成 o 程序开头包含相应头文件,头文件中提供程序所需要调用的系统库函数 注:在 5.0 之后的 Dev C+...+ 中,iostream 已经不包括 cstdio、cstring、cstdlib、algorithm等,其他常用的 min、max 函数也不包括 cstdio: getchar(), stdin, stdout

    81130

    C语言到C++的OOP 面向对象编程

    C++的特点 C++继承了C的优点,并有自己的特点,主要有: 1、全面兼容C,C的许多代码不经修改就可以为Cpp所用,用C编写的库函数和实用软件可以用于Cpp。...2、用C++编写的程序可读性更好,代码结构更为合理,可直接在程序中映射问题空间结构。 3、生成代码的质量高,运行效率高。...函数参数也可以用const说明,用于保证实参在该函数内部不被改动,大多数C++编译器能对具有const参数的函数进行更好的代码优化。...内联函数在第一次被调用前必须进行声明或定义,否则编译器将无法知道应该插入什么代码。 (2). C++的内联函数具有与C中的宏定义#define相同的作用和类似机理,但消除了#define的不安全性。.../调用函数max_min     cout<<ma<<mi; } void max_min(int *p,int n,int &max,int &min) //形参max 和min定义成引用 {

    3.2K2218

    VC++的DLL应用(含Demo演示)

    C++和C#各有优缺,目前我对它们俩的定位是:C++用来写一些底层的程序,比如驱动,或者是一些算法类型的函数接口,然后用C#来调用这些接口并进行界面设计。如何函数的实现跨语言呢?...2 DLL调用 2.1 用C++调用显式链接 新建一个Win32的控制台程序进行显式调用: 1. 新建“dllConsoleEvident”的Win32控制台程序项目 2....(hDLL,"Max"); Min=(pMin)GetProcAddress(hDLL,"Min"); if (Max)//如果取出函数成功,则执行下面的语句 { int A=Max(5,8); cout...Max(5,6); c=Min(5,6); CDialog::OnOK(); } 通过设置断点单步运行就可以看到dll文件中的函数已经被成功调用了。...(好像跨语言调用的时候不能进行联调,笔者只在C++互相调用的时候联调成功过,但C#调用的时候没有联调成功,这个问题有待解决) 4.

    96720

    4.C++中的函数重载,C++调用C代码,newdelete关键字,namespace(命名空间)

    本章主要内容: 1)函数重载 2)C++调用C代码 3)new/delete关键字实现动态内存分配 4)namespace命名空间 ---- 大家都知道,在生活中,动词和不同的名词搭配一起,意义都会大有不同...注意: 重载函数需要避免使用参数默认值 调用重载函数时,只会匹配函数参数表,与函数返回值无关 函数重载必须发生在同一个作用域中 重载函数的入口地址,不能直接通过函数名来获取 2.C++与C代码相互调用...当C++想调用C里的某个函数时,则使用extern “C” 还是举个栗子,通过C++调用C里面的add()函数 1) 首先创建3个文件 ?...add.c代码如下: #include "add.h" int add(int a,int b) { return a+b; } add.h代码如下: int add(int a,int b);...(namespace) 4.1回顾C: 大家都知道,在C语言中,当编译多个C文件时,可能会遇到同名全局标识符的错误,这是因为C语言中的所有全局标识符都是共享同一个作用域 4.2所以C++中便提出命名空间

    85020

    C++ 模板学习

    模板的概念。 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。...现在,我们再重新审视上述的max()函数,它们都具有同样的功能,即求两个数的最大值,能否只写一套代码解决这个问题呢?这样就会避免因重载函数定义不 全面而带来的调用错误。...为解决上述问题C++引入模板机制,模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。...n1,n2中的最小值.同理调用min(d1,d2)时,求出d1,d2中的最小值. 3....答案1:重载了 () 操作符的对象,因此,这里需要明确两点:   1 仿函数不是函数,它是个类;   2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用比如:   struct

    970100

    2014.03.16 网易游戏TTT计划实习生笔试题

    (malloc/new的内存在堆分配,局部非静态变量在栈中分配内存) 7.下面代码的输出结果:(vs2008 测试是25 82,其实这种题比较坑爹)  C++ Code  12345678910111213...a && c++)        b++;    else        c++;    printf("%d %d", b, c);} 8.定义一个宏,若满足条件则终止程序并报告错误文件名和行数,并有以下调用...基于这个思路,我们可以写出如下的代码:  C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940...false : true;} 或者排除法: 1)确认5张牌中除了0,其余数字没有重复的(可以用表统计的方法且记录0的个数); 2)满足这样的逻辑:(max,min分别代表5张牌中的除0以外的最大值最小值...) 如果没有0,则max-min=4,则为顺子,否则不是 如果有一个0,则max-min=4或者3,则为顺子,否则不是 如果有两个0,则max-min=4或者3或者2,则为顺子,否则不是 4

    68690

    DeepMind新AI发现提速70%排序算法,十年都没更的C++库更新了

    因为,无论是排序还是哈希,它们的应用场景从在线购物、云计算到供应链管理等各个场景都能用到,每天会被调用上亿次!...不过,如DeepMind所说: 大家千万不要太兴奋了,AI的力量用于代码效率提升才刚刚开始。...同样,AlphaDev则是通过交换和复制移动,跳过了一个步骤,以一种看似错误但实际上是捷径的方式达成目标。...如下图所示,在对8个元素进行排序的算法中,AlphaDev也同样利用“AlphaDev Copy Move”,用max (B, min (A, C))替换了原始实现中更为复杂的max (B, min (...不过,由于本次研究中使用的汇编语言具有局限性,他们接下来还是打算尝试AlphaDev在高级语言(如 C++)中优化算法的能力。 网友:不算发现新的排序算法 对于这一成果,不少人表示非常兴奋。

    27030

    C# 委托一(委托基础)

    委托类似于引用类型,和C++中的函数指针很相似,但是不同之处就在于,它不是存在于堆中的。正是有了委托我们才得以将函数打包成一个变量进行传递。...MyDelegate md = null;  上面代码先声明了两个函数Max和Min,然后声明具有与上述两函数相同签名的委托 delegate int MyDelegate(int x...看上述截图输入两个数字,并选择Max或者Min,单击按钮即可获的结果。...从上面的代码中,可以发现,在使用委托之前,先要判断其值是否为空,如果不为空,则可以进行调用,同时,使用者可以看到,在调用md时,我们并没有关心md到底指向了哪一个方法,总之,md不为空的时候,就一定会指向...Max和Min当中的一个。

    64140
    领券