在调试程序时,有一个参数需要在多个函数之间传递,因为是作为调试参数,不想将参数引入到函数中。
很自然的想到使用全局变量来表示这个公共参数,工程代码的结构如下:
main.c test.c test.h
main.c和test.c中均调用了test.h文件
全局变量 g_tag
新建一个pubparamter.h文件:
内容如下:
#ifndef _PUBPARAMTER_H_
#defien _PUBPARAMTER_H_
int g_tag;
#endif
之后在文件main.c和test.c文件中,编译发现,g_tag多重定义了,这是因为
加入#include "pubparamter.h"两个c语言在包含pubparamter.h是,对于全局的g_tag定义了两次,导致重定义了。
解决方案1
利用C语言的extern关键字。
extern是C/C++语言中表明函数和全局变量的作用范围的关键字,
该关键字告诉编译器,其申明的函数和变量可以在本模块或其他模块中使用。
在main.c中定义全局变量int g_tag;
在test.c中声明,extern int g_tag;
这个声明表示g_tag为一个外部文件的局部变量,这里只是声明,并非定义。
注意c语言中,声明和定义变量的区别:
声明---表示在文件中可以使用这个变量,但不分配存储空间;
定义---表示在文件中可以使用这个变量