C语言所谓的全局变量在多个.c文件中到底该怎样使用?

    大家应该都知道,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的语句,这样做并没有出现重复定义的错误。

    参考了一下材料,大家说,全局变量应该定义在头文件包含进使用变量的源文件,全局变量在头文件中只能声明但是不能定义

    本博文主要是想告诉大家全局变量在多文件中到底该定义在哪里?如有问题,欢迎指正,欢迎转载,注明出处,谢谢。



  • 41
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值