全局变量初始化

tez*_*tez 0 c++

原则上,在调用main()之前初始化在任何函数外部定义的变量(即全局,名称空间和类静态变量).翻译单元中的这些非局部变量按其声明顺序初始化

以上是我的讲师给出的课堂笔记.

#include <iostream>

using namespace std;
int a=99;
int b;
int main(int argc, char *argv[]) 
{
  cout<<a<<endl;
  cout<<b<<endl;
  return 0;
}
b=100;
Run Code Online (Sandbox Code Playgroud)

我运行它时出错.在调用main()之前'b'分配给100是不是真的?错误是 C++ requires a type specifier for all declarations

pax*_*blo 5

这里的问题不是初始化顺序:bmain开始运行之前确实已初始化.

问题是"可见度" b.在点在哪里main被编译,也就是没有b.

您可以通过将定义/初始化移动b到之前来修复它main:

#include <iostream>

using namespace std;
int a = 99;
int b = 100;
int main (int argc, char *argv[]) {
    cout << a << '\n';
    cout << b << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者只是表明b存在:

#include <iostream>

using namespace std;
int a = 99;
extern int b;
int main (int argc, char *argv[]) {
    cout << a << '\n';
    cout << b << '\n';
    return 0;
}
int b = 100;
Run Code Online (Sandbox Code Playgroud)

这两个解决方案b在运行时创建或初始化时都不会更改,它们只是b在内部提供main.