C++ 不同文件中全局变量的初始化顺序(gcc)

两个文件,每个文件里面都有全局对象,那么全局构造的顺序和编译时文件名的书写先后顺序一致。

举个例子:
t.h

struct T{
    int i;
    T(int i): i(i) {}
};

t1.cpp

#include <stdio.h>
#include "t.h"

extern T b;
T a(1);

t2.cpp

#include <stdio.h>
#include "t.h"

extern T a;
T b(a.i);

int main(){
    printf("t1.cpp %d ", a.i);
    printf("t2.cpp %d\n", b.i);
    return 0;
}

然后用不同的文件顺序分别编译:

$g++ -std=c++11  t1.cpp t2.cpp -o obj1
$./obj1

打印:t.cpp 1 t2.cpp 1

$g++ -std=c++11  t2.cpp t1.cpp -o obj2
$./obj2

打印:t.cpp 1 t2.cpp 0

可见全局构造的顺序和编译时文件名的书写顺序一致。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。