在同一头文件中定义外部变量
Defining an extern variable in the same header file
我想知道是否可以在同一个头文件中声明和定义一个外部变量。我需要在多个文件中引用变量,虽然我意识到有更好的方法可以实现这一点,但在这种情况下,使用extern是唯一的选择。那么有可能做到吗:
// in main.h
extern int foo;
int foo;
etc...
然后任何包含main.h的文件都可以访问foo?许多例子都提到在一个单独的cpp文件中定义extern’d变量,但我只是想知道我建议的方式是否会在项目的其余部分造成问题。
如果在头文件中放入一个定义,那么当涉及多个源文件时,最终会得到多个定义。
例如,假设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中的定义和h中的extern声明。
例如:
// global.h
extern int foo;
和
// global.cpp
int foo;
然后在任何需要foo
的文件中:
#include "global.h"
当然,global.cpp
必须是项目的一部分(与其他文件一起编译(
只有在没有多个文件定义同一变量的情况下,您在C++
中所做的操作才是完全合法的。
变量或函数可以在另一个源文件中定义,或者稍后在同一文件中。变量和函数的声明默认情况下,文件作用域是外部的。
通常,我们extern
是在其他文件中声明的全局变量。
这与初始化为0
的全局变量一样好。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- C++编程从外部文本文件定义数组大小
- MAKE:找不到包含的用户定义的头文件?
- 定义C++新的环境变量并在 bat 文件中使用它
- 在头文件中定义变量不会出错
- 即使我没有包含多个文件,C++中的多个定义错误
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 将文件复制到自定义位置,存在字符串转换问题
- 如何正确定义C++类析构函数并将其链接到主文件?
- C2011: 'Card':"类"类型重新定义(尽管使用了包含保护并且没有在文件中重新定义.cpp类)
- 从头文件定义嵌套类
- 使用标头文件定义MT19937和normal_distribution
- 为特定文件定义
- 从.h和.cpp文件定义纯虚拟函数会产生链接器错误吗
- C 编程从外部输入文件定义数组大小
- 编译头文件定义了一个模板类,该类还包括其他头文件