C中大多数未初始化的错误似乎来自范围,如答案:Uninitialized Structures in C。
但是在这个例子中,我已经在同一范围内声明了所有变量。我无法直接回答为什么gcc编译器会警告未初始化的变量。如何初始化我的变量没有错误?
#include <stdio.h>
int main() {
int a,b,c;
a =+ 3;
b -=2;
c = 0;
printf("a = %d, b = %d\n",a,b );
return 0;
}
您声明了变量a
和b
但是在使用它们时它们没有被初始化。
需要初始化非静态局部变量。这意味着您需要在声明它们之后为这些变量赋值。
你应该有这样的东西:
int main()
{
int a = 0;
int b = 0;
int c;
a =+ 3;
b -=2;
c = 0;
printf("a = %d, b = %d\n", a, b);
return (0);
}
否则,当你执行a =+ 3
时,你的a
变量被声明但仍然没有任何值。当你做b
时,b -= 2
也会发生同样的事情。
int a,b,c;
a =+ 3;
a
未初始化,然后将其初始化31.然而,变量b
未初始化,您从未初始化的值中减去2。 c
被声明但后来被初始化(0)。
结果毫无意义,因为这是未定义的行为。当然海湾合作委员会会对此发出警告。你有什么期望?
编辑
在main
函数运行之前,只有全局变量和静态变量用0初始化。局部变量未初始化。在你的例子中,a
,b
和c
是局部变量,因此你必须初始化它们。
fotenotes
1I最初误读了代码并将第二行作为a += 3
进行了重叠。然后我的解释是正确的,它将为未初始化的值添加3。但在a =+3;
的情况下,它与a=3;
相同,这将用3初始化a
。我不知道你是否打算这样做,或者你想要+=
和错误输入=+
。