改变"未初始化的局部变量的行为"错误

时间:2015-08-03 09:43:21

标签: c++ global-variables

请考虑以下代码:

#include "stdafx.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
  int count123;
  for (int c = 0; c < 10; c++)
  {
    count123 += c;
  }

    return 0;
}

编译后,我收到警告:warning C4700: uninitialized local variable 'count123' used

我知道reason声明count123但没有初始化它。

但如果我将count123声明为全局变量,如下面的代码所示,则警告消失。

#include "stdafx.h"
using namespace std;

int count123;
int _tmain(int argc, _TCHAR* argv[])
{

  for (int c = 0; c < 10; c++)
  {
    count123 += c;
  }

    return 0;
}

据我所知,将count123声明为全局变量会改变其范围但是如何删除警告?请指导。

4 个答案:

答案 0 :(得分:5)

全局变量初始化为零(顺便说一下,这同样适用于静态变量)。这就是为什么你没有得到这个消息。

这里标准引用:

  

8.5 / 10:在任何其他初始化之前,每个静态存储持续时间的对象在程序启动时都是零初始化的   发生了。在某些情况下,稍后会进行额外的初始化。

答案 1 :(得分:2)

全局变量总是被零初始化,想到一个全局指针,用一些随机值初始化,并且你错误地在你的代码中使用它。  全局初始化使其为NULL,因此您可以检查它并相应地使用。

  

- 如果它有指针类型,则将其初始化为空指针;

     

- 如果它有算术类型,则初始化为(正数或   无符号)零;

答案 2 :(得分:2)

全局变量是静态存储变量,默认情况下为零初始化。有关详细信息,请参阅答案here

答案 3 :(得分:1)

默认情况下,全局变量用初始化,因此没有警告。

您可以轻松获取C++ standards的草稿,然后阅读 8.5初始化程序:

部分
  

10   [注意:在进行任何其他初始化之前,静态存储持续时间的每个对象在程序启动时都是零初始化的。在某些情况下,稍后会进行额外的初始化。 - 后注]