我想知道是否可能在同一个头文件中同时声明和定义一个外部变量。我需要在多个文件中引用这个变量,虽然我意识到有更好的方法来实现这一点,但在这种情况下使用extern是唯一的选择。那么是否可以这样做:
// in main.h
extern int foo;
int foo;
etc...
那么任何包含main.h文件的文件都将可以访问foo变量?很多例子都提到在另一个cpp文件中定义extern变量,但我只是想知道我所建议的方法是否会在项目的其他部分引起问题。
如果您将定义放在头文件中,当涉及多个源文件时,您将得到多个定义。
例如,假设main.c
和other.c
都包含foo.h
。 当编译这些文件时,您将得到main.o
和other.o
,两者都有int foo
的定义。 然后,如果尝试将main.o
和other.o
链接到单个可执行文件中,则会出现链接器错误,指出int foo
被定义了两次。
要正确实现此操作,您需要在头文件中声明变量为extern int foo
。 然后,在一个(且仅一个)源文件中,您需要定义变量为int foo
。
真正的定义(不是 extern
)不应该放在头文件中。
如果您希望在不同的 cpp 中使用一个全局变量,需要进行两个步骤:在一个 cpp 文件中进行定义,在头文件中进行外部声明。
例如:
// global.h
extern int foo;
and
// global.cpp
int foo;
然后在任何需要foo
的文件中:
#include "global.h"
global.cpp
必须是项目的一部分(与其他文件一起编译)。C++
中是完全合法的,只要没有多个文件定义了相同的变量。extern
。0
的全局变量一样好。
extern
来共享源文件之间的变量? - Jonathan Leffler