c语言中相同代码的不同答案

c语言中相同代码的不同答案,c,gcc,g++,C,Gcc,G++,这段代码中发生了什么 #include <stdio.h> int main(){ int e; printf("%d ", e); printf("%s", e); return 0; } e会有吗 垃圾值? b空 在GCC中显示垃圾值,在g++中显示0和NULL。 谢谢 此程序调用未定义的行为。在第二条printf语句中,对int数据类型使用了错误的格式说明符。别指望有什么好结果。还请注意,e未初始化,其值不确定。这两个语句都调用未定义的行为,

这段代码中发生了什么

#include <stdio.h>

int main(){
    int e;
    printf("%d ", e);
    printf("%s", e);
    return 0;
}
e会有吗 垃圾值? b空

在GCC中显示垃圾值,在g++中显示0和NULL。
谢谢

此程序调用未定义的行为。在第二条printf语句中,对int数据类型使用了错误的格式说明符。别指望有什么好结果。还请注意,e未初始化,其值不确定。

这两个语句都调用未定义的行为,因为e对象未初始化,因此其值不确定

第二条语句也有错误的转换说明符,%s规范需要char*参数


因此,正如有人在评论中提到的,正确的答案不是a或b,而是c恶魔飞出你的鼻子。

编译此程序时生成警告:

警告:格式“%s”要求参数类型为“char”,但参数2的类型为“int”[-Wformat=] printf%s,e;*

在这两种情况下,它都会生成垃圾值

通用条款:

g++:


你怎么认为?也就是说,g++是GCC的一部分,那么您真正的问题是什么呢?正确答案:c dragonsIt可能是。但是,如果您使用gcc-Wall-Wextra-g编译,您将收到警告