【发布时间】:2015-09-15 21:40:18
【问题描述】:
我从网上找到了这个 C 程序:
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
这个程序的有趣之处在于,当它在 C89 模式下编译和运行时,它会打印出C89,而当它在 C99 模式下编译和运行时,它会打印出C99。但我无法弄清楚这个程序是如何工作的。
您能解释一下printf 的第二个参数在上述程序中是如何工作的吗?
【问题讨论】:
-
提示:C++ 风格的
//注释是在 C99 中引入的。 -
不错的技巧 - 但它失败了
gcc。如果没有std=c99,您将收到警告,如果您忽略它,gcc将仍然将//解释为评论的开头(啊——您必须使用-pedantic作为好吧。我默认开启。) -
@Jongware 好吧,我在 gcc 4.9.2 中得到了
C89和明确的std=c89。 -
以防有人在寻找测试 C99 支持的方法时发现此问题;请使用
#if __STDC_VERSION__ >= 199901L之类的东西,而不是//评论技巧。 =) -
它还为 C11 打印“C99”...