在.cpp中声明外部变量而不是头文件有什么用?
What is the use of declare extern variable in .cpp but not header file?
据我所知,extern关键字用于声明需要在多个文件中使用的全局变量。通常extern关键字在头文件中定义,并在许多.cpp或头文件中重用
昨天我在我们的代码库中看到了一个特殊的用法,作者在.cpp中声明外部变量,并在main.cpp
中定义该变量。d.cpp
extern int whatever; //yes, it is declared in .cpp but not .h
main.cpp
#include "d.hpp"
int whatever = 100;
int main()
{
//do something
}
在。cpp而不是。h中声明外部变量的好处和缺点是什么?
这没有意义。如果d.p p需要这个外部变量,那么它应该通过包含一些头文件来获得它。如果main的作者出于某种原因决定将"whatever"称为"int whatever"更好,那么您将得到一个难以发现的链接器错误。如果main的作者将其更改为"char whatever",那么每当d.p写入它认为是"extern int whatever"的内容时,它将覆盖一些内存,从而可能导致很难发现bug。
extern
用于使用外部链接声明名称,并且将在其他地方定义。无论在头文件还是.cpp文件中声明extern
都无关紧要。据我所知,在.cpp文件中声明它没有特别的缺点或好处。但是正如其他人指出的那样,声明应该在头文件中,而定义应该在包含头文件的源文件中。使用extern
可能会引入难以发现的细微错误。
相关文章:
- c++库的公共头文件中应该包含什么
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 文件系统:复制功能的速度秘诀是什么
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 在C++中包含原型文件的正确方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 什么文件可以修改 atom 的C++语法?
- 引用文件的适当方法是什么?
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 生成文件"relink"意味着什么?
- 将位字符串转储到二进制文件的最佳方法是什么
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 通过boost asio iostream下载大文件的最快方法是什么?
- C++我应该用什么来保存格式化为字符串变量(如sprintf())的文件
- 这个错误可能是什么?ANSI C文件
- Dll中缺少什么(致命错误LNK1107:无效或损坏的文件:)
- 读取二进制文件的惯用C++17标准方法是什么
- 解析二进制文件.什么是现代方式