初始化外部变量的用例

Use case for initialized extern variable

本文关键字:变量 外部 初始化      更新时间:2023-10-16

我意识到我可以定义一个extern变量,像:

source.cpp

extern int i = 42; // definition, can very well just remove the `extern`

main.cpp

#include <iostream>
extern int i; // declaration
int  main()
{
    std::cout << i << std::endl;
}

我可以编译并链接程序,

g++ main.cpp source.cpp

,它运行并正确显示42。我得到的警告是

警告:'i'初始化并声明为'extern' (gcc)

警告:'extern'变量有初始化项(clang)

source.cpp中使用int i = 42;具有完全相同的总体效果。

我的问题:是否有任何非平凡的用例变量定义 extern(不只是声明,然后在另一个翻译单元定义)?这样的定义是否符合标准?

extern说明符在与没有它的内部链接的变量一起使用时非常有用,例如命名空间范围内的常量:

a.cpp:

extern const int n = 10;  // external linkage

b.cpp:

int main()
{
    extern const int n;   // finds the n defined in the other TU
    return n;
}