在.cpp中声明外部变量而不是头文件有什么用?

What is the use of declare extern variable in .cpp but not header file?

本文关键字:文件 什么 cpp 声明 外部 变量      更新时间:2023-10-16

据我所知,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可能会引入难以发现的细微错误。