【发布时间】:2013-12-02 06:15:23
【问题描述】:
我在野外看到了以下代码,我不知道该怎么做:
或多或少:
int main(void)
{
int a = 0, v;
printf("%d\n", v);
}
这个带有 gcc 的代码将打印出 0。虽然起初我,哦,那是因为初始化的局部变量被分配了 0,但在这种情况下,我从未声明 v 的类型......所以给出了什么?
【问题讨论】:
-
初始化的局部变量赋值为 0 - 不,它有垃圾。而
v的类型是int。 -
v 的类型是
int。并且行为仍然未定义。v的值为indeterminate。 -
在我的机器上我得到 1664045150 而不是 0。你只是碰巧得到 0。
-
FWIW 我认为这个问题的一个更好的标题是“未分配局部变量的值”,因为就目前而言,您的程序没有任何分配给
v,也不能调用vunreferenced,因为你……清楚地引用了它! #Pedantic :) -
读取未初始化的变量会导致未定义的行为。
标签: c