全局变量可以定义在头文件中吗?
在C和C++编程中,全局变量可以定义在头文件中,但通常不建议这样做,因为这可能导致多个源文件(.c 或 .cpp 文件)包含同一个头文件时,发生多重定义错误(multiple definition error)。
为什么不建议在头文件中定义全局变量?
-
多重定义错误:
当多个源文件包含同一个头文件时,每个源文件都会有一个该全局变量的定义,链接器在链接这些文件时会报错,因为同一个全局变量被定义了多次。 -
命名冲突:
头文件通常被多个源文件包含,如果全局变量定义在头文件中,不同的头文件之间可能会出现命名冲突。
推荐的做法
1.在头文件中声明全局变量:
使用 extern
关键字在头文件中声明全局变量,这样可以在多个源文件中引用该变量,而不会导致多重定义。
// globals.h
extern int globalVar;
2.在一个源文件中定义全局变量:
在任意一个源文件中定义该全局变量,这样编译器只会为这个变量分配一次内存。
// globals.c
#include "globals.h"
int globalVar = 0;