不同翻译单元的变量初始化

Variable initialization in different translation unit

本文关键字:变量 初始化 单元 翻译      更新时间:2023-10-16

假设有两个翻译单位:

//--a.cpp--//
int a;
int b; 
int c;
int main(){ }
//--b.cpp--//

int d;
int e;
int f;

该程序不启动线程。因此(3.6.2/2)

变量的初始化是不确定排序的关于变量的初始化,在不同的翻译单元。

这是否意味着只有在一个翻译单元(如b.cpp)的所有变量初始化之后,实现才开始初始化另一个翻译单元(a.cpp)的变量?

翻译单元中全局变量的初始化是按定义顺序进行的,所以a, b, cd, e, f

但是如果是a, b, c,然后是d, e, f,或者如果是相反的,它是未指定的。

或甚至在交错的顺序(说,a, d, b, c, e, f),虽然我认为大多数实现将初始化所有全局变量从一个翻译单元在单行,所以除了在多线程,我不认为这将在实践中发生。

不,不确定排序意味着它们以某种顺序出现,但该顺序未指定。一个翻译单元中的变量将在另一个单元中的变量之前或之后初始化。