GCC变量未在本地范围内未初始化

时间:2018-02-09 22:36:33

标签: c gcc

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;
}

2 个答案:

答案 0 :(得分:2)

宣布你的变量ab但是当你使用它们时,它们不是初始化

非静态局部变量需要初始化。这意味着您需要在声明它们之后为这些变量赋值

你应该有这样的东西:

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中,bc是局部变量,因此必须初始化它们。

<强> fotenotes

1 我最初误读了代码并将第二行插入 a += 3 。然后我的解释是正确的 它会为未初始化的值增加3。但是在 a =+3; 的情况下 与 a=3; 相同,这会将a初始化为3.我不知道你是否知道 打算这样做,或者您想要+=并错误地输入=+