请考虑以下代码:
#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声明为全局变量会改变其范围但是如何删除警告?请指导。
答案 0 :(得分:5)
全局变量初始化为零(顺便说一下,这同样适用于静态变量)。这就是为什么你没有得到这个消息。
这里标准引用:
8.5 / 10:在任何其他初始化之前,每个静态存储持续时间的对象在程序启动时都是零初始化的 发生了。在某些情况下,稍后会进行额外的初始化。
答案 1 :(得分:2)
全局变量总是被零初始化,想到一个全局指针,用一些随机值初始化,并且你错误地在你的代码中使用它。 全局初始化使其为NULL,因此您可以检查它并相应地使用。
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正数或 无符号)零;
答案 2 :(得分:2)
全局变量是静态存储变量,默认情况下为零初始化。有关详细信息,请参阅答案here。
答案 3 :(得分:1)
默认情况下,全局变量用零初始化,因此没有警告。
您可以轻松获取C++ standards的草稿,然后阅读 8.5初始化程序:
部分10 [注意:在进行任何其他初始化之前,静态存储持续时间的每个对象在程序启动时都是零初始化的。在某些情况下,稍后会进行额外的初始化。 - 后注]