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;
}
答案 0 :(得分:2)
你宣布你的变量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
会发生同样的情况。
答案 1 :(得分:1)
int a,b,c;
a =+ 3;
a
未初始化,然后将其初始化为3 1 。但是,变量b
未初始化,您从未初始化的值中减去2。声明c
但后来初始化(0)。
结果没有意义,因为这是未定义的行为。当然是GCC 会警告它。你有什么期望?
修改强>
在main
函数运行之前,只有全局变量和静态变量初始化为0。局部变量未初始化。在您的示例a
中,b
和c
是局部变量,因此你必须初始化它们。
<强> fotenotes 强>
1 我最初误读了代码并将第二行插入 a += 3
。然后我的解释是正确的
它会为未初始化的值增加3。但是在 a =+3;
的情况下
与 a=3;
相同,这会将a
初始化为3.我不知道你是否知道
打算这样做,或者您想要+=
并错误地输入=+
。