C 为什么printf()在下面的代码中打印0而不是10?
如果我编译并运行以下代码,它将打印0而不是10C 为什么printf()在下面的代码中打印0而不是10?,c,linux,variables,C,Linux,Variables,如果我编译并运行以下代码,它将打印0而不是10 #include<stdio.h> main() { int Var=10; { char Var=Var; printf("%d",Var); } } #包括 main() { int-Var=10; { char Var=Var; printf(“%d”,Var); } } 为什么打印0而不是10?因为在本地声明中 char Var=Var; 正确出现的Var指的是本地Var,而不是上
#include<stdio.h>
main()
{
int Var=10;
{
char Var=Var;
printf("%d",Var);
}
}
#包括
main()
{
int-Var=10;
{
char Var=Var;
printf(“%d”,Var);
}
}
为什么打印0而不是10?因为在本地声明中
char Var=Var;
正确出现的Var
指的是本地Var
,而不是上面的。如前所述,这是从未初始化的变量赋值
因此,您的声明根本不初始化Var
,即Var
包含垃圾。在您的特定情况下,垃圾恰好是0
顺便说一句,在同一个函数中有两个同音词Var
,这真是太糟糕了
正如建议的那样,您应该使用
gcc-Wall-Wshadow
进行编译,然后在代码中会得到一些警告。(还要添加-g
以获取调试信息,以便能够使用gdb
进行调试)假设您使用的是gcc,则需要启用-Wshadow()。
这将在与外部变量同名的内部变量处弹出一个错误。零是一个随机值。它可以打印那个地方的任何垃圾。试试这个
#include<stdio.h>
main()
{
int Var1=10;
{
char Var=Var1;
printf("%d",Var);
}
}
#包括
main()
{
int Var1=10;
{
char-Var=Var1;
printf(“%d”,Var);
}
}
<代码> = var < /Cord>已经指的是<代码> char Var < /C>。现在你想读这个:但是它是C++ Link,不应该包含垃圾吗?所以它可以打印垃圾值,包括<代码> 0 < /代码>。对!+1.编译器或IDE是否可以警告潜在问题。对不起,我已经习惯了因特利奇的检查。@巴西尔:现在有意义。它也不总是打印<代码> 0 <代码>。但是任何事情。你可能会考虑删除你的答案,因为它在编辑后已经变得多余。答案与这个答案有联系。可以删除吗?我不知道,这是问这个问题的好地方吗?