全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

  • 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?   

     

    答:可以,在不同的C文件中以static形式来声明同名全局变量。   可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.    

     

     

    -------1. 请高手用VC举个例子.

           2. 如何在不同的C文件中以static形式来声明同名全局变量?

答案

  • 2008年7月22日 7:58
    Jimt200010 的头像
    Jimt200010
    2,495
      已答复

    全局变量可不可以  定义在  可被多个.C文件包含的  头文件中  ?为什么?

     

    答:可以,extern 和 static 都行,但有一点需要注意,看例子

     

    我们有一个 global.h 文件和三个 c 文件

     

     

    Code Snippet

    // global.h ,注意这里绝对不能赋初值

    static int g_current;

    extern int g_count;

     

     

     

    Code Snippet

    // a.c

    #include global.h

     

    void func1()

    {

      g_current++;

      g_count = 3;

    }

     

    // 主入口,这里无关紧要

    int main()

    {

      return 0

    }

     

     

     

    Code Snippet

    // b.c

    #include global.h

     

    void func2()

    {

      g_current++;

      g_count = 5;

    }

     

     

     

    Code Snippet

    // c.c

    #include global.h

     

    void func3()

    {

      g_current--;

      g_count = 11;

    }

     

     

    这样的话三个c文件就是公用这两个全局变量了。但还有一些问题:

    对于 extern int g_count  编译不通过,因为大家都是 extern,没有一个是实体

    对于 static int g_current 编译可以通过,但逻辑不对,因为没有初始化,这个static变量就没有任何意义了

     

    所以实际使用中需要对其中的任何一个c文件做一下改进,比如入口函数所在的 a.c

     

    Code Snippet

    // a.c

    #include global.h

     

    int g_count;  // 这里才是真正的定义,其他地方的都是引用这里的

                  // 虽然这里也在h中声明了一次extern,但没有影响

     

    void func1()

    {

      g_current++;

      g_count = 3;

    }

     

    // 主入口,这里无关紧要

    int main()

    {

      g_current = 0;  // 对static变量初始化。由于无法在定义时做,那么就在入口函数里完成好了。

      return 0

    }

     

     

    之后编译运行都正常。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值