#include<stdio.h>
void func();
void func()
{
int y;
y=y+2;
printf("%d",y);
}
int main()
{
func();
func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么第二次调用func()时打印24,变量y必须死掉?为什么即使未声明它也表现得像静态变量?
这是未定义的行为,因为未初始化的局部变量。
如果在给变量赋值之前使用了自动存储变量,则该存储可以保存其先前保存的内容,因此该变量的内容将不可预测。
C标准是6.3.2.1 p2:
如果左值指定了可以使用寄存器存储类声明的自动存储持续时间的对象(从未使用其地址),并且该对象未初始化(未使用初始化器声明,并且在使用前未对其进行任何赋值) ),则行为未定义。
因此,最好在创建后立即初始化变量,例如:
void func()
{
int y = 0;
^^^
y=y+2;
printf("%d",y);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |