大家应该都知道,C语言定义的变量的作用范围是从定义的位置起,到特定的时刻或位置后就被释放掉了,具体的作用范围希望大家能细心去看看,很重要,包括auto, static, const定义的变量和函数,还有malloc等函数申请的内存的使用。
那么,进入正题了,C语言所谓的全局变量在多个.c文件中到底该怎样使用?
首先说一下全局变量的特性:
全局变量可以定义在一个.c文件中,变量存储在静态存储区,变量可以被其他文件中的函数使用,变量的作用范围是整个程序,全局变量可以再被使用过的地方改变数值。当定义了全局变量的时候,在其他.c文件中使用的时候需要加上extern前缀以声明是来自来自外部的外部变量;
那么来看程序吧:
定义的文件:a.c b.c main.c test.h
main.c中内容:
内容主要是定义了全局变量global_variate(注意:定义的位置是在函数外部,不需要加上static前缀,因为C语言默认全局变量就是定义在静态存储区的)同时打印了global_variate的值:10,调用了a.c中的fun_a()函数,b.c中的fun_b()函数。
a.c中的内容:
内容是声明使用了global_variate变量,令其为20,并且打印其值
b.c中的内容:
内容是声明使用了global_variate变量,令其为30,并且打印其值
test.h的内容:
声明fun_a和fun_b函数,包括使用的头文件
进行编译显示的内容:
此时显示出程序执行的结果如上
看到了预期的结果了,哈哈,有人可能会问如果全局变量定义在main函数中呢会出现什么效果
呐:如下
可见在a.c和b.c中报错显示未定义变量global_variate,看来这样不叫全局变量,而extern的功能是声明定义在其他文件中的变量,而不是声明定义在其他函数中的变量。
那么,更会有人问了,如果定义在头文件中呢是什么效果呢?好,满足您?
编译通过了哎,而且显示正确的,那么分析一下,包含了test.h的三个文件,编译过程中(具体忘了。。。哈哈)都会嵌入int global_variate的语句,这样做并没有出现重复定义的错误。
参考了一下材料,大家说,全局变量应该定义在头文件包含进使用变量的源文件,全局变量在头文件中只能声明但是不能定义
本博文主要是想告诉大家全局变量在多文件中到底该定义在哪里?如有问题,欢迎指正,欢迎转载,注明出处,谢谢。