初始化外部变量的用例

时间:2015-09-30 17:48:09

标签: c++ extern

我意识到我可以定义 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。我得到的警告是

  

警告:&#39;我&#39;初始化并声明&#39; extern&#39; (GCC)

     

警告:&#39; extern&#39;变量有一个初始值设定项(clang)

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

我的问题:变量已定义 extern是否存在任何非常重要的用例(不仅仅是在另一个翻译单元中声明然后定义)?这样的定义是否符合标准?

1 个答案:

答案 0 :(得分:5)

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;
}