(初学者问题:)
我通过用户定义的函数初始化了一些全局变量,并将它们的执行顺序与main()进行了比较。结果显示这些全局变量'首先是初始化。
我不确定主函数外是否有任何执行序列。我可以确认总是如此(全局声明区域出现在main()
之前)吗?
看到c
在main()
之后宣布但先前已执行,这令人困惑。
以下是我使用的代码:
int foo(string);
int a = foo("a"); /* global var init */
int main(int argc, char **argv) {
cout << "main() is now executed" << endl;
return 0;
}
int b = foo("b"); /* global var init */
int foo(string s){
cout << "foo() is now executed for : " << s << endl;
return 42;
}
int c = foo("c"); /* global var init */
结果:
foo() is now executed for : a
foo() is now executed for : b
foo() is now executed for : c
main() is now executed
答案:
不,这不是固定的订单。
见n3797,3.6.2 / 5:
是实现定义的,是否在线程初始函数的第一个语句之前完成了具有静态或线程存储持续时间的非局部变量的动态初始化。