【发布时间】:2015-10-01 01:54:03
【问题描述】:
我意识到我可以定义 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 const int i = 42; -
@KerrekSB 哦,是的,确实,你能写一个答案让我接受吗?我完全忘记了
const需要初始化。但仍不完全清楚,为什么source.cpp中的const int i = 42;不起作用并产生未定义的符号? -
好的,完成。这是关于链接;您写的内容不会产生外部链接。
-
现在很有意义,谢谢,一直忘记
const有内部链接。 -
好吧,
const在命名空间范围内的变量,是的...