Linux中有条件操作员的奇异使用[英] Bizarre use of conditional operator in Linux

本文是小编为大家收集整理的关于Linux中有条件操作员的奇异使用的处理方法,想解了Linux中有条件操作员的奇异使用的问题怎么解决?Linux中有条件操作员的奇异使用问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

在3.0.4 Linux内核中,MM/Filemap.c具有此代码线:

retval = retval ?: desc.error;

我尝试用GCC -Wall编译类似的最小测试用例,但不要收到任何警告;这种行为似乎与:

相同
retval = retval ? retval : desc.error;

查看C99标准,我无法弄清楚什么正式描述了这种行为.为什么还可以?

推荐答案

正如其他几个人所说的那样,这是GCC扩展,而不是任何标准的一部分.如果您使用-pedantic开关,您将获得警告.

在这种情况下,此扩展的点并不是真正可见的,但是想象一下是否是

retval = foo() ?: desc.error;

使用扩展名,foo()仅称为一次.没有它,您必须引入一个临时变量,以避免两次调用foo().

其他推荐答案

这是GCC扩展. x ?: y等于x ? x : y ----参见 http://gcc. gnu.org/onlinedocs/gcc/conditionals.html#conditionals .

是的,我认为这也是邪恶的.

其他推荐答案

这是一个GCC扩展名,称为条件省略操作数.省略中间操作数的效果是将条件的值作为省略的操作数,而无需再次对其进行评估.即使条件是宏也可以安全使用.

本文地址:https://www.itbaoku.cn/post/359141.html