c - Linux 中条件运算符的奇怪使用

标签 c linux gcc c99

在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() 两次。

关于c - Linux 中条件运算符的奇怪使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7814694/

相关文章:

c++ - 多线程应用程序中的控制台

将 uint8_t 连接到一个 char*

c++ - Linux API 列出正在运行的进程?

linux - 如何在内核编程中获取USB设备的详细信息?

c++ - 有没有一种标准的方法来使用 STL 在 Linux 上使用 gcc 进行 findfirst、findnext?

c++ - make clean 结果没有具有特定 makefile 名称的目标

C:从字符数组复制到 int

c - 在 C 中将数组存储为链表

linux - 如何在 linux 中获取事件文件/dev/input/event*

c++ - std::min/max 类型推导在 linux 和 windows 上不同