我知道全局变量是按同一编译单元的声明顺序创建的,并且未在多个编译单元之间定义创建顺序。
我前段时间读过,全局变量是在调用定义它们的编译单元中的任何代码之前创建的。这是由标准定义的吗?
例子:
文件1.cpp
int f1v1 = f1_1();
int f1v2 = f1_2();
void f1(){...}
int f1_1(){...}
int f1_2(){...}
文件2.cpp
static int f2v1 = f2_1();
static int f2v2 = f2_2();
int f2_1(){...}
int f2_2(){...}
主文件
#include "file1.h"
#include "file2.h"
int main()
{
f1();
return 0;
}
在这种情况下,是否由 before和 beforef1_1()
调用的标准保证?由标准保证并且完全被调用,因为没有调用file2.cpp中定义的函数并且在file2.cpp之外不可见?f1_2()
f1()
f2_1()
f2_2()
f2v1
f2v2
编辑:
当file1.cpp在lib1中编译,file2.cpp在lib2中编译时,标准规定的行为是什么?