GCC变量未在本地范围内未初始化[重复]

问题描述 投票:-1回答:2

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;
}
c gcc
2个回答
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
投票
int a,b,c;
a =+ 3;

a未初始化,然后将其初始化31.然而,变量b未初始化,您从未初始化的值中减去2。 c被声明但后来被初始化(0)。

结果毫无意义,因为这是未定义的行为。当然海湾合作委员会会对此发出警告。你有什么期望?

编辑

main函数运行之前,只有全局变量和静态变量用0初始化。局部变量未初始化。在你的例子中,abc是局部变量,因此你必须初始化它们。


fotenotes

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

© www.soinside.com 2019 - 2024. All rights reserved.