我意识到我可以定义 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
是否存在任何非常重要的用例(不仅仅是在另一个翻译单元中声明然后定义)?这样的定义是否符合标准?
答案 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;
}