【问题标题】:Why printf() is printing 0 instead of 10 in following code? [duplicate]为什么 printf() 在下面的代码中打印 0 而不是 10? [复制]
【发布时间】:2014-04-09 05:51:13
【问题描述】:

如果我编译并运行以下代码,它会打印 0 而不是 10。

#include<stdio.h>
main()
{
    int Var=10;
   {
     char Var=Var;
     printf("%d",Var);
   }
}

为什么打印 0 而不是 10?

【问题讨论】:

标签: c linux variables


【解决方案1】:

因为在本地声明中

 char Var=Var;

Var 的正确出现是指本地的Var,而不是上面的。正如Alk 评论的那样,这是undefined behavior 从一个未初始化的变量赋值。

所以你的声明根本没有初始化Var,即Var包含垃圾。在您的特定情况下,该垃圾恰好是 0。

顺便说一句,在同一个函数中有两个同音字Var 真的很糟糕。

正如this answer 建议的那样,您应该使用gcc -Wall -Wshadow 进行编译,然后您的代码会收到一些警告。 (也可以添加-g获取调试信息,以便能够使用gdb进行调试)

【讨论】:

  • 那么,它不应该包含垃圾吗?
  • 所以它可以打印一个垃圾值,包括0.. 对!!
  • +1!编译器或 IDE 是否可以警告潜在问题。对不起,我习惯了 IntelliJ 检查。
  • @Basile:现在说得通了。
  • 此外,它并不总是打印0,而是任何东西。
【解决方案2】:

假设您使用的是 gcc,您可能需要打开 -Wshadow (http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html)。 这会在内部变量与外部变量同名时弹出一个错误。零是一个随机值。它可以打印那个地方的任何垃圾。

【讨论】:

  • 您现在可以考虑删除您的答案,因为在编辑this 之后它已经变得多余了。
  • 那个答案有一个指向这个答案的链接。可以删除吗?我不知道,这甚至是问这个问题的正确地方吗?
【解决方案3】:

试试这个

#include<stdio.h>
main()
{
    int Var1=10;
   {
     char Var=Var1;
     printf("%d",Var);
   }
}

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 2019-08-02
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多