初始化外部变量的用例
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;
}
我可以编译并链接程序,
g++ main.cpp source.cpp
,它运行并正确显示42
。我得到的警告是
警告:'i'初始化并声明为'extern' (gcc)
警告:'extern'变量有初始化项(clang)
在source.cpp
中使用int i = 42;
具有完全相同的总体效果。
我的问题:是否有任何非平凡的用例变量定义 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"关键字?
- 同时具有"外部"和"内联"说明符的变量
- 访问 PlatformIO 中的外部环境变量
- 如何在函数外部访问函数中局部变量的值?
- 堆栈/帧指针作为外部变量
- 使用外部文件中的变量进行视觉C++
- 内联函数/变量的外部链接
- 当使用lambda进行变量的复杂初始化时,如何处理从内部抛出的lambda外部异常
- const_cast const 方法中的"this"将"this"分配给外部变量?
- 全局外部指针变量在 DLL 中不可见
- 在没有外部文件的情况下在应用会话之间保存变量
- 外部变量的初始化
- 全局变量的循环依赖性与外部说明符
- 如何在命名空间中初始化外部变量
- 声明类指针变量外部班级
- 在 VC++ 中访问一个文件中声明的变量.(外部关键字用法)
- 为什么 cout 不打印变量"C"外部?
- 全局变量外部声明后的线程专用指令
- c++变量外部声明