- 博客(4)
- 资源 (3)
- 收藏
- 关注
原创 细数linux内核里那些偏门的C语言语法(四)(unsigned long)-MAX_ERRNO
这个语法应该很多人知道,看来还是我基础不好,所以才一时没看懂同样是在跟内核代码码时发现#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) 其中#define MAX_ERRNO 4096 (unsigned long)减去MAX_ERRNO ? 这是什么鬼? 其实不是,真正的意思是
2017-06-19 11:41:05
1859
原创 细数linux内核里那些偏门的C语言语法(三) !!(x)
经常看到判断语句前面有加likely(x),知道这是告诉编译器,这个判断语句很可能为“真”,这样有利于提高程序运行速度。但是从来没有跟进去看下,跟进去之后看到likely(x) __builtin_expect(!!(x), 1) __builtin_expect (exp, c)是gcc编译器的编译指令,告诉编译器,exp==c 很可能成立 但是!!(x)又是什么
2017-06-19 11:15:28
625
原创 细数linux内核里那些偏门的C语言语法(二)x... 与 #x
同样是在跟linux内核源码的时候,看到这样的宏定义 #define __stringify_1(x...) #x#define __stringify(x...) __stringify_1(x)x...是什么意思呢? #x又是什么意思? #x是将x转换成字符串。比如下面代码 printf(__stringify
2017-06-17 18:38:42
609
原创 细数linux内核里那些偏门的C语言语法(一)简化三目运算
#include int main(){ int a = 3; printf("a = %d\n", a?:4);}这里先简单介绍一些三目运算,就是 表达式1 ? 表达式2 : 表达式3当表达1结果非0时结果为表达式2当表达1f结果为0时结果为表达式3 比如 int a = 3;int b;b = a? a : 6;如果a为0,b 结果为6,其
2017-06-17 16:36:44
1357
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人