在.cpp但不是头文件中使用declare extern变量有什么用?

时间:2014-05-17 14:15:29

标签: c++ extern

据我所知,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?之前从未听过这样的技术,也无法通过谷歌找到一个例子。

2 个答案:

答案 0 :(得分:4)

没有意义。如果d.cpp需要这个extern变量,那么它应该通过包含一些头文件来获取它。如果出于某种原因,主要作者出于某种原因决定"无论什么"会更好地调用" int无论如何",你会得到一个难以找到的链接器错误。如果main的作者将其更改为" char what;"然后每当d.cpp写出它认为是什么时候" extern int whatever;"它会覆盖一些内存,导致可能很难找到错误。

答案 1 :(得分:0)

extern用于使用外部链接声明 名称,并且已定义在其他地方。是否在头文件或.cpp文件中声明extern并不重要。 AFAIK,在.cpp文件中声明它没有特别的缺点或好处。但正如其他人所指出的,声明应该在头文件中,而源文件中的定义包括头部。使用extern可能会引入难以发现的细微错误。