我意识到我可以定义一个extern变量,例如:
source.cpp
extern int i = 42; // definition, can very well just remove the `extern`
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include <iostream>
extern int i; // declaration
int main()
{
std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
然后我可以编译和链接程序,
g++ main.cpp source.cpp
Run Code Online (Sandbox Code Playgroud)
它运行并正确显示42.我得到的警告是
警告:'我'初始化并声明'extern'(gcc)
警告:'extern'变量有一个初始值设定项(clang)
使用int i = 42;in source.cpp具有完全相同的整体效果.
我的问题:是否有任何非平凡的用例定义 变量extern(不只是声明然后在另一个翻译单元中定义)?这样的定义是否符合标准?
该extern说明符与没有它的内部链接的变量结合使用,例如命名空间范围内的常量:
a.cpp:
extern const int n = 10; // external linkage
Run Code Online (Sandbox Code Playgroud)
b.cpp:
int main()
{
extern const int n; // finds the n defined in the other TU
return n;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |