Linux内核随处可见到关于三元操作符?:的这种使用方法:

rdev->map_name = map_name ?: RC_MAP_EMPTY;

这是GNU C的关于标准C三元操作符?:的一个扩展,用来省略条件表达式的中间参数。也就是说, x ? : yx ? x : y完全等价。

所有GNU扩展都在GCC手册的Extensions to the C Language Family章节有详细描述。要注意,这些写法仅适合GCC编译器,如果要编写可移植的代码,那么就要格外小心。