这似乎是使用gcc -Wall
(4.9.2)
#include <stdio.h>
int main(int argc, char **argv){
printf("%d\n", argc-1?:42);
return 0;
}
如果我运行它
argc-1
评估为false
),它会打印42
; argc-1
评估为true
),它会输出n-1。 如果我认为x?:y
在这种情况下等同于x?1:y
,我是对的吗?这是标准的,预期的行为,还是只是GCC的怪癖?
答案 0 :(得分:5)
对于条件运算符的简写版本,这是一个已知的gcc extension。
argc-1?:42
与
相同(argc-1)?(argc-1):42
使用此变体的原因是(和我引用)
“当它变得有用时是第一个操作数,或者可能(如果它是一个宏参数),包含副作用。然后在中间重复操作数将执行两次副作用。省略中间操作数使用已经计算的值而没有重新计算它的不良影响。“