在同一头文件中定义外部变量

Defining an extern variable in the same header file

本文关键字:文件 定义 外部 变量 一头      更新时间:2023-10-16

我想知道是否可以在同一个头文件中声明和定义一个外部变量。我需要在多个文件中引用变量,虽然我意识到有更好的方法可以实现这一点,但在这种情况下,使用extern是唯一的选择。那么有可能做到吗:

// in main.h
extern int foo;
int foo;
etc...

然后任何包含main.h的文件都可以访问foo?许多例子都提到在一个单独的cpp文件中定义extern’d变量,但我只是想知道我建议的方式是否会在项目的其余部分造成问题。

如果在头文件中放入一个定义,那么当涉及多个源文件时,最终会得到多个定义。

例如,假设main.cother.c都包括foo.h。编译这些文件时,您将得到main.oother.o,这两个文件都有int foo的定义。如果您尝试将main.oother.o链接到一个可执行文件中,您会得到一个链接器错误,指出int foo定义了两次。

要正确执行此操作,请将头文件中的变量声明为extern int foo。然后,在一个(也是唯一一个(源文件中,使用int foo定义变量。

实定义(而非extern(不应在头文件中。

如果你想从不同的cpp中获得一个全局变量,你应该做两件事:一个cpp中的定义和h中的extern声明。

例如:

// global.h
extern int foo;

// global.cpp
int foo;

然后在任何需要foo的文件中:

#include "global.h"

当然,global.cpp必须是项目的一部分(与其他文件一起编译(

只有在没有多个文件定义同一变量的情况下,您在C++中所做的操作才是完全合法的。

变量或函数可以在另一个源文件中定义,或者稍后在同一文件中。变量和函数的声明默认情况下,文件作用域是外部的。

通常,我们extern是在其他文件中声明的全局变量。

这与初始化为0的全局变量一样好。