【问题标题】:Different answers for same code in cc中相同代码的不同答案
【发布时间】:2015-01-25 10:59:03
【问题描述】:

这段代码发生了什么?

#include <stdio.h>

int main(){
    int e;
    printf("%d ", e);
    printf("%s", e);
    return 0;
}

e 会有 a) 垃圾价值? b) 空

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

【问题讨论】:

  • 你怎么看?也就是说,g++ 是 GCC 的一部分,那么您的问题到底是什么?
  • 正确答案:c)
  • 可能是worse than dragons。但是,如果您使用 gcc -Wall -Wextra -g 编译,您会收到警告

标签: c gcc g++


【解决方案1】:

这两个语句都调用了未定义的行为,因为 e 对象没有被初始化,所以它的值是不确定的。

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

所以正如 cmets 中有人提到的,正确答案既不是 a) 也不是 b),而是 c) 恶魔从你的鼻子里飞出来

【讨论】:

    【解决方案2】:

    此程序调用未定义的行为。您在第二个 printf 语句中为 int 数据类型使用了错误的格式说明符。不要指望任何好处。另请注意,e 未初始化,其值不确定。

    【讨论】:

      【解决方案3】:

      这个程序在编译时产生警告:

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

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

      gcc:

      g++

      【讨论】:

        猜你喜欢
        • 2022-11-29
        • 2021-04-14
        • 2015-06-25
        • 1970-01-01
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 2015-05-18
        • 1970-01-01
        相关资源
        最近更新 更多