最近审核代码发现,有些刚入门的同学在头文件中定义了全局变量,链接报错重定义。

一般来讲,全局变量一定要定义在.c文件中,比如int g_int=0;,然后头文件extern int g_int,老司机差不多都这样写,这样某个地方(其它源文件)中需要用到该全局变量就把这个头文件包含进去,或者在其它源文件中直接extern int g_int,可千万不要将全局变量定义在头文件中,如果定义在头文件中,包含了这个头文件的文件都会在预处理的时候展开这个头文件,相当于在这里又定义了一个int g_int=0;链接的时候就会出错。

另外,在一些编译器中会提示你加static,当你在头文件中定义全局变量的时候,加了static的全局变量表示只在该源文件中有效,不管是.h还是.c,所以你某个源文件中能编译通过,在使用的时候发现,这个全局变量地址怎么不一样,这就是因为加了static的缘故,相当于你在两个原文件中分别定义了static的同名变量,因为static修饰作用,不会重名报错,但是很有可能跟你初始想法就不一样了。

所以最后记得千万不要在头文件中定义全局变量,而要在.c文件中定义,如果全局变量特别多,上百个,可以专门用一个头文件来引入这些全局变量,也就是一个头文件专门:

extern int g_int=0;
extern float g_float=0.0f;
.........

然后在用的地方直接导入该头文件就可以了,不用在每个用的地方专再重复extern了。

————————————————

原文链接:https://blog.csdn.net/weixin_43360707/article/details/108796577