为什么默认情况下,varibale在c中声明为静态? #包括 void func(); void func() { int-y; y=y+2; printf(“%d”,y); } int main() { func(); func(); 返回0; }
为什么第二次调用func()时,变量y必须消失?为什么它的行为像静态变量一样,即使它没有被声明?它是未定义的行为,因为未初始化的局部变量 如果在为自动存储变量赋值之前使用了该变量,则该存储可能会保存以前保存的任何内容,因此该变量的内容将不可预测 C标准为6.3.2.1 p2: 如果左值指定自动存储持续时间的对象,则 可以用寄存器存储类声明(从未声明过 该对象未初始化(未声明) 使用初始值设定项,且之前未对其进行赋值 要使用),该行为未定义 因此,最好在创建变量后立即初始化变量,如:为什么默认情况下,varibale在c中声明为静态? #包括 void func(); void func() { int-y; y=y+2; printf(“%d”,y); } int main() { func(); func(); 返回0; },c,variables,C,Variables,为什么第二次调用func()时,变量y必须消失?为什么它的行为像静态变量一样,即使它没有被声明?它是未定义的行为,因为未初始化的局部变量 如果在为自动存储变量赋值之前使用了该变量,则该存储可能会保存以前保存的任何内容,因此该变量的内容将不可预测 C标准为6.3.2.1 p2: 如果左值指定自动存储持续时间的对象,则 可以用寄存器存储类声明(从未声明过 该对象未初始化(未声明) 使用初始值设定项,且之前未对其进行赋值 要使用),该行为未定义 因此,最好在创建变量后立即初始化变量,如: #i
#include<stdio.h>
void func();
void func()
{
int y;
y=y+2;
printf("%d",y);
}
int main()
{
func();
func();
return 0;
}
程序具有未定义的行为,因为函数
func
中使用了未初始化的变量y
void func()
{
int y = 0;
^^^
y=y+2;
printf("%d",y);
}
对于这个问题,该函数可以使用未被其他函数覆盖的相同内存。因此,在函数调用之间,存储在内存中的值可以相同。编译器应该警告您,您的代码正在生成未定义的行为。但默认情况下,它始终初始化为零
void func()
{
int y;
^^^^^^
y=y+2; // using an uninitialized variable
printf("%d",y);
}