为什么默认情况下,varibale在c中声明为static?

时间:2017-04-14 10:27:05

标签: c variables

"dataset":"krs_podmioty"

为什么在第二次调用func()时打印24,变量y必须死?为什么它表现得像静态变量,即使它尚未声明?

2 个答案:

答案 0 :(得分:4)

未定义的行为,因为未初始化的局部变量。

如果您在为其分配了值之前使用了自动存储变量,那么该存储可以保存之前保存的任何内容,因此该变量的内容将是不可预测的。

C标准是6.3.2.1 p2:

  

如果左值指定一个自动存储持续时间的对象   可以用寄存器存储类声明(从来没有   它的地址),并且该对象未初始化(未声明   使用初始化程序并且之前未执行任何赋值   使用),行为未定义。

所以,如果你在创建之后初始化变量,那就更好了,比如:

void func()
{
int y = 0;
       ^^^
y=y+2;
printf("%d",y);
}

答案 1 :(得分:0)

程序具有未定义的行为,因为在函数y中使用了未初始化的变量func

void func()
{
int y;
^^^^^^
y=y+2; // using an uninitialized variable
printf("%d",y);
}

至于问题,那么函数可以使用未被其他函数覆盖的相同内存。因此,存储在内存中的值在函数调用之间可以是相同的。