#include<stdio.h>
void func();
void func()
{
int y;
y=y+2;
printf("%d",y);
}
int main()
{
func();
func();
return 0;
}
为什么打印24时FUNC()被调用第二时间,y具有可变死?为什么它的行为像静态变量,即使它没有被声明?为什么默认情况下,varibale在c中声明为static?
#include<stdio.h>
void func();
void func()
{
int y;
y=y+2;
printf("%d",y);
}
int main()
{
func();
func();
return 0;
}
为什么打印24时FUNC()被调用第二时间,y具有可变死?为什么它的行为像静态变量,即使它没有被声明?为什么默认情况下,varibale在c中声明为static?
这是未定义行为因为未初始化的局部变量。
如果您使用自动存储变量前值已分配给它,该存储可容纳不管它以前举行,所以变量的内容将是不可预测的。
C标准是6.3.2.1 P2:
如果左值表示的是 可以被宣布使用寄存器存储类自动存储持续时间的对象(从未有过 其地址取),以及对象未初始化(未声明 与一个初始化和没有分配给它已被执行之前 使用),则该行为是未定义的。
所以,如果你初始化变量更好的只是创造后,像:
void func()
{
int y = 0;
^^^
y=y+2;
printf("%d",y);
}
谢谢!它的工作 –
但默认情况下,它始终被初始化为零 –
该计划不确定的行为,因为使用该函数func
内未初始化的变量y
。
void func()
{
int y;
^^^^^^
y=y+2; // using an uninitialized variable
printf("%d",y);
}
至于问题,那么函数可以使用未被某些其他函数覆盖的相同内存。所以存储在内存中的值可以在函数调用之间相同。
您的代码产生不确定的行为,编译器应该警告你。 –