细数linux内核里那些偏门的C语言语法(一)简化三目运算
来源:互联网 发布:默沙东临床数据管理员 编辑:程序博客网 时间:2024/06/07 05:44
以前上课时我们老师说他只是熟悉C语言算不上精通,我当时就觉得奇怪,老师懂那么多还不算精通?
工作后觉得自己C语言已经比较熟悉,直到阅读linux内核源码才发现,C语言还有很多很多我们不知道的东西,我们离所谓的精通其实还很远。
先从一个我在内核源码我看到的三目运算说起。
当表达1结果非0时,程序会执行表达式2,结果为表达式2的执行结果
当表达1f结果为0时,程序会执行表达式3,结果也为表达式3的执行结果
比如
int a = 3;
int b;
b = a? 2 : 6;
如果a为0,b 结果为6,其余结果为2。
近来在弄linux驱动的GpioKey,在跟static int __devinit gpio_keys_probe(structplatform_device *pdev) 时发现,有一段代码如下:
unsignedint type = button->type ?: EV_KEY;
当时就觉得奇怪,三目运算 ,应该有三个表达式,为什么只有两个?
是不是表达式2被省略了?
如果button->type为真,type的值等于button->type?
有了这样的假设,我就写了一个代码验证
#includeint main(){int a = 3;printf("a = %d\n", a?:4);}
执行结果为3,证明我的想法正确。
得出下面结论:
三目运算形式为 表达式1 ?:表达式2 时
当表达式结果1非0,结果为表达式1 否则结果为表达式2
有错误的地方还请大家指正,共同学习一起进步。
原创作品,转载请注明出处,谢谢
阅读全文
0 0
- 细数linux内核里那些偏门的C语言语法(一)简化三目运算
- 细数linux内核里那些偏门的C语言语法(三) !!(x)
- 细数linux内核里那些偏门的C语言语法(二)x... 与 #x
- 细数linux内核里那些偏门的C语言语法(四)(unsigned long)-MAX_ERRNO
- C、C++、Java三种语言语法对比(一)
- C语言的三目运算符
- C语言求三个数的中间值(三目运算符)
- c语言语法(三)
- Linux内核入门(三)—— C语言基本功
- Linux内核入门(三)—— C语言基本功
- Linux内核入门(三)—— C语言基本功
- C语言的那些小秘密之指针(三)
- C语言的那些小秘密之【指针(三)】
- C语言的那些小秘密之【链表(三)】
- C语言的那些事儿之三
- C语言中唯一的一个三目运算符(条件运算符)
- C语言的那些题 (一) —— 两个数四则运算程序
- C语言中浮点数的运算
- Codeforces 817C Really Big Numbers【思维+二分】
- Hadoop多个文件单词计数
- Visual Stdio 注册表相关路径
- Java重排序对多线程的影响
- caffe中 insert_splits Unknown bottom blob
- 细数linux内核里那些偏门的C语言语法(一)简化三目运算
- QT 打开文件对话框
- 解决“Maven项目中的Dynamic Web Module 3.0 requires Java 1.6 or newer”问题
- 对于org.apache.commons.dbcp.BasicDataSource的配置认知
- 动态规划实例(十四):划分问题
- Unity3D之第一人称第三人称角色控制组件修改C#版本
- Spring NamedParameterJdbcTemplate
- Hadoop搭建并执行MapReduce
- java回忆篇