在同一个头文件

时间:2015-08-10 17:15:44

标签: c++ c extern

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

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

etc...

然后包含main.h的任何文件都可以访问foo?许多示例引用了在单独的cpp文件中定义extern-d变量,但我只是想知道我建议的方式是否会导致项目其余部分出现问题。

3 个答案:

答案 0 :(得分:9)

如果将一个定义放在头文件中,当涉及多个源文件时,最终会有多个定义。

例如,假设main.cother.c都包含foo.h。当您编译这些文件时,您将获得main.oother.o,这两个文件都定义为int foo。如果您然后尝试将main.oother.o链接到单个可执行文件中,则会收到链接器错误,指出int foo已定义两次。

要正确执行此操作,您在头文件中声明您的变量extern int foo。然后,在一个(且只有一个)源文件中,您定义变量int foo

答案 1 :(得分:4)

真正的定义(不是extern)不应该在头文件中。

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

E.g:

// global.h
extern int foo;

// global.cpp
int foo;

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

#include "global.h"

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

答案 2 :(得分:1)

只有在没有多个文件定义相同变量时,您在C++中完全合法。

  

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

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

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