我从网上找到了这个C程序:
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
这个程序的有趣之处在于,当它在C89模式下编译和运行时,它打印C89
,当它在C99模式下编译和运行时,它打印C99
.但我不知道这个程序是如何工作的.
你能解释一下printf
的第二个参数在上面的程序中是如何工作的吗?
我从网上找到了这个C程序:
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
这个程序的有趣之处在于,当它在C89模式下编译和运行时,它打印C89
,当它在C99模式下编译和运行时,它打印C99
.但我不知道这个程序是如何工作的.
你能解释一下printf
的第二个参数在上面的程序中是如何工作的吗?
C99允许//
样式的注释,而C89不允许.所以,要翻译一下:
C99:
printf("C%d\n",(int)(90-(-4.5 /*Some comment stuff*/
-4.5)));
// Outputs: 99
C89:
printf("C%d\n",(int)(90-(-4.5/
-4.5)));
/* so we get 90-1 or 89 */