【发布时间】:2016-07-28 11:27:07
【问题描述】:
这似乎使用gcc -Wall (4.9.2) 编译和运行而没有警告
#include <stdio.h>
int main(int argc, char **argv){
printf("%d\n", argc-1?:42);
return 0;
}
如果我运行它
- 使用 0 个参数(使
argc-1评估为false),它会打印42; - n>=1 args(使
argc-1评估为true),它会打印 n-1。
如果我假设x?:y 在这种情况下等同于x?x:y,我是对的吗?这是标准、预期的行为,还是只是 GCC 的怪癖?
【问题讨论】:
-
哎哟——我发现这是一个骗局,但为时已晚。老实说,我四处寻找。
-
" 1 或更多(使 argc-1 评估为真),它打印 1" 不,它没有,它打印
(argc-1),例如4 个参数输出 4,42 个参数输出 42。因为(argc-1)是int不是布尔值。
标签: c gcc conditional-operator