据我所知,extern关键字用于声明需要在多个文件中使用的全局变量。通常,extern关键字在头文件中定义,并在许多.cpp或头文件中重用
昨天我在代码库中看到了一个特殊的(?)用法,作者 在.cpp中声明一个extern变量,并在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?之前从未听过这样的技术,也无法通过谷歌找到一个例子。
答案 0 :(得分:4)
没有意义。如果d.cpp需要这个extern变量,那么它应该通过包含一些头文件来获取它。如果出于某种原因,主要作者出于某种原因决定"无论什么"会更好地调用" int无论如何",你会得到一个难以找到的链接器错误。如果main的作者将其更改为" char what;"然后每当d.cpp写出它认为是什么时候" extern int whatever;"它会覆盖一些内存,导致可能很难找到错误。
答案 1 :(得分:0)
extern
用于使用外部链接声明 名称,并且已定义在其他地方。是否在头文件或.cpp文件中声明extern
并不重要。 AFAIK,在.cpp文件中声明它没有特别的缺点或好处。但正如其他人所指出的,声明应该在头文件中,而源文件中的定义包括头部。使用extern
可能会引入难以发现的细微错误。