我从网上找到了这个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 */

C++相关问答推荐

C中的整字母后缀i是什么

传递给空闲的无效地址0x71 db7 cb5e0:未分配值

错误:在.h程序中重新定义 struct

C中的__attributor__((aligned(4),packed))与 struct 的用法

增加getaddrinfo返回的IP地址数量

测量ARM MCU中断延迟的问题

为什么该函数不将参数值保存到数据 struct 中?

如何在C语言中正确打印图形

X64:并发写入布尔数组

用C++实现余弦函数

从C文件中删除注释

如何在C++中安全地进行浮点运算

C中的回文数字

如何摆脱-WIMPLICIT-Function-声明

哪些C++功能可以在外部C块中使用

C 语言中 CORDIC 对数的问题

const struct 成员的 typedef 中的灵活数组大小

使用 GCC 将一个函数中初始化的 struct 体实例通过指针传递到 C 中的另一个函数会产生不同的结果

使用复合文字数组初始化的指针数组

GDB 用内容初始化数组