初始化外部变量的用例
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;
}
我意识到我可以定义一个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;
}