更改"uninitialized local variable"错误的行为



考虑以下代码:

#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

我知道原因是声明了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作为一个全局变量将改变其作用域,但如何消除警告?请指导。

全局变量是零初始化的(顺便说一下,静态变量也是如此)。这就是你收不到这条信息的原因。

这里是标准引语:

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

全局变量是静态存储变量,默认为零初始化。

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

—如果是指针类型,则初始化为空指针;

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

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

你可以很容易地得到c++标准的草案,然后阅读8.5初始化:

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

相关内容

  • 没有找到相关文章

最新更新