细数linux内核里那些偏门的C语言语法(三) !!(x)
来源:互联网 发布:数据标准化方法比较 编辑:程序博客网 时间:2024/06/06 02:52
经常看到判断语句前面有加likely(x),知道这是告诉编译器,这个判断语句很可能为“真”,这样有利于提高程序运行速度。
但是从来没有跟进去看下,跟进去之后看到
likely(x) __builtin_expect(!!(x), 1)
__builtin_expect (exp, c)是gcc编译器的编译指令,告诉编译器,exp==c 很可能成立
但是!!(x)又是什么意思呢?
原来!!(x) 是将x转换为bool类型, 0为 0 ,非0为1。
这样就相当于告诉编译器x判断是为真很可能成立。
如果没有加!!,那么只是告诉编译器x语句执行结果等于1很可能成立而已。
那么如果x是负数呢?
有了这个疑惑于是写了一个程序验证
#include <stdio.h>
int main()
{
int x = -3;
printf("!!x = %d\n", !!(x));
return 0;
}
输出结果为
!!x = 1
证明和if语句一样,非0即为真,负数也为真。
阅读全文
0 0
- 细数linux内核里那些偏门的C语言语法(三) !!(x)
- 细数linux内核里那些偏门的C语言语法(二)x... 与 #x
- 细数linux内核里那些偏门的C语言语法(一)简化三目运算
- 细数linux内核里那些偏门的C语言语法(四)(unsigned long)-MAX_ERRNO
- C语言的那些事儿之三
- C 语言之三 声明的语法
- c 语言里 类型转换那些事儿
- c 语言里 类型转换那些事儿
- c语言语法(三)
- Linux内核入门(三)—— C语言基本功
- Linux内核入门(三)—— C语言基本功
- Linux内核入门(三)—— C语言基本功
- C语言的那些小秘密之指针(三)
- C语言的那些小秘密之【指针(三)】
- C语言的那些小秘密之【链表(三)】
- linux内核源代码的C语言代码
- C函数指针的偏门作用
- [C]C语言中函数参数传递的三种方式(x,*x,&x)
- 设计模式(对象创建)——原型模式
- 多类型查询
- 决策树(补充)
- 统一接口开发架构,统一接口架构实现封装
- Eclipse.exe目录下有jre,为什么启动会报错?
- 细数linux内核里那些偏门的C语言语法(三) !!(x)
- StringUtils
- angularjs的$on、$emit、$broadcast
- DirectShow安装
- baiduMap
- git上传本地文件的方法
- Unity Shader 之Geometry Shader
- MFC-SpinControl(数值调节按钮)
- FastStone Cpture 8.5和Snagit 13.1.3使用比较