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

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

作者: 先点菜吧 | 来源:发表于2018-11-13 16:53 被阅读0次

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

举个例子:
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

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

相关文章

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

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

  • static

    c的static 全局变量 定义初始化最好在.c文件c++类的static成员变量在.h class中只是声明

  • 关于gcc

    gcc的文件组成 gcc内部使用的程序: gcc涉及到的头文件 gcc涉及到的库文件 关于库文件的链接顺序 gcc...

  • gcc 查看命令

    查看头文件路径 查看GCC的搜索目录:(gcc --help)查看编译c++文件使用的头文件目录的命令为:`gcc...

  • 命令行编译C++/C文件

    编译C文件用GCC 编译C++文件(包括.C/C++文件)用G++ 编译C++文件常用方法: 单个文件: g++ ...

  • c++编程

    1.mac下编译.cpp文件报错 gcc 开启使用标准c++库即可 比如: gcc -lstdc++ Person...

  • 文件操作

    讲所有记录顺序的写入一个文件→顺序文件:一个有限字符构成的顺序字符流。C++标准库中:ifstream(读取),o...

  • c程序运行时内存空间分配

    bss:全局变量,未初始化,或初始化为0 data:全局变量,已初始化 rodata(read only):程序中...

  • Golang 初始化流程

    规则: package 只会被初始化一次 同一个 package,不同文件是按照文件名的顺序来初始化 不能循环 i...

  • 2020-05-19

    go 文件代码初始化顺序

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/hhulfqtx.html