初始化外部变量的用例

Use case for initialized extern variable

我意识到我可以定义一个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;
}

然后我可以编译 link 程序,

g++ main.cpp source.cpp

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

warning: 'i' initialized and declared 'extern' (gcc)

warning: 'extern' variable has an initializer (clang)

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

我的问题:变量 defined 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;
}