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

Linux内核代码maxmin实现以及语句表达是({})应用

Linux内核代码中有很多比较精巧程序设计技巧,include/linux/kernel.h中实现maxmin宏就是其中一部分。...我们先来看一下普通maxmin一般怎么写: #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.4K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++ 初识

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

    52330

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

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

    49810

    自学C++基础知识

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

    80630

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

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

    51110

    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.

    95420

    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++中便提出命名空间

    84620

    C++ 模板学习

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

    955100

    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)满足这样逻辑:(maxmin分别代表5张牌中除0以外最大值最小值...) 如果没有0,则max-min=4,则为顺子,否则不是 如果有一个0,则max-min=4或者3,则为顺子,否则不是 如果有两个0,则max-min=4或者3或者2,则为顺子,否则不是 4

    67990

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

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

    26530

    C# 委托一(委托基础)

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

    63640
    领券