c语言自动变量全局变量,C语言中全局变量的共享

近日在工作中碰到这样一个问题:如何在多个.c文件中共享全局变量/外部函数? 以前所惯用的方法是在其中一个.c文件(一般是主控文件 如MAIN.C)中定义全局变量,在其他的.c文件通过关键字extern(外部的) 声明,但这样不便于管理和改动这些变量。于是想把所有的全局变量集中到一个文件里面,这样便于管理和改动。从网上找了些资料,但是没明白个所以然,很含糊。通过一上午查阅相关的教材,终于有所收获。有以下几种方法可以实现全局变量在多个.c文件中共享:

1.   在其中一个.c文件中定义,在其他.c文件中用关键字extern声明

如://MAIN.c                                              //file2.c                                                 //file3.c

......                                                    ......                                                       .....

int  A;    //定义全局变量A                  extern (int)  A;    //变量A声明                 extern (int)  A;    //变量声明

{                                                        {                                                            {

...                                                       ...                                                        ...

}                                                        }                                                             }

这样在MAIN.c    file2.c    file3.c中都可以使用全局变量A,    但是这种方法不便于变量的管理和修改。

2.   将所有全局变量定义在头文件中,在主控文件(MAIN.c)中包含这个头文件,在其他.c文件中用关键字extern声明

//头文件Variable.h

#ifndef   _VARIABLE_H_

#defin   _VARIABLE_H_

...

int  A;

char B;         //在头文件中定义变量A,B

...

#endif

其他源文件:

//MAIN.c                                                     //file2.c                                          //file3.c

...                                                                 ...                                                    ...

#include "Variable.h"   //包含头文件            extern (int) A;  //变量声明             extern (char) B;   //变量声明

...                                                                ...                                                    ...

{                                                                 {                                                      {

...                                                                 ...                                                     ...

}                                                                   }                                                      }

说明:在文件file2.c    file3.c中要用到什么变量就声明什么变量

在上例中,在MAIN.c文件中变量A和B都可见; 在file2.c文件中变量A可见,变量B不可见;在file3.c文件中变量A不可见,而变量B可见。如果要使得变量A和B在文件file2.c   file3.c中都可见,就将声明语句改为:extern (int) A;  extern (char) B;

这种方法与方法1差不多,变量声明语句比较多,只是将定义变量的位置由主控文件移至头文件中,照样不便于修改。

3.   将所有全局变量定义在头文件中,在主控文件(MAIN.c)中包含头文件及其他.c文件

//头文件Variable.h

#ifndef   _VARIABLE_H_

#defin   _VARIABLE_H_

...

int  A;

char B;         //在头文件中定义变量A,B

...

#endif

其他源文件:

//MAIN.c                                                     //file2.c                                          //file3.c

...                                                                // ...                                                    //...

#include "Variable.h"   //包含头文件

#include "file2.c"         //包含文件file2.c

#include "file3.c"          //包含文件file3.c      //extern (int) A;  //变量声明             //extern (char) B;   //变量声明

...                                                                //...                                                    //...

{                                                                 {                                                      {

...                                                                 ...                                                     ...

}                                                                   }                                                      }

这样在编译时,系统自动将file2.c   file3.c放到main函数的牵头作为一个整体进行编译,而不是分3个文件进行编译。这时,这些文件被认为在同一个文件中,不再作为外部函数被其他文件调用。编译器按主控文件所包含文件的顺序进行编译,文件包含顺序:头文件必须在其他.c文件之前,否则出错。

该方法不用在其他.c文件中声明变量,只需将其他.c文件包含到主控MAIN.c文件中,便于管理和修改。但是这样有一个问题:不能在其他.c(file2.c   file3.c)文件中设置断点等,不便于调试。

4.   将所有全局变量定义在专门一个.c文件中,用一个头文件来声明这些变量,在主控文件及其他.c文件中包含这个头文件

//头文件Variable.h

#ifndef   _VARIABLE_H_

#defin   _VARIABLE_H_

...

extern (int)  A;

extern (char) B;         //在头文件中声明变量A,B

...

#endif

//Variable.c

#ifndef   _VARIABLE_C_

#defin   _VARIABLE_C_

...

int  A;

char B;         //在.c文件中定义变量A,B

...

#endif

其他源文件:

//MAIN.c                                                     //file2.c                                           //file3.c

...                                                                 ...                                                    ...

#include "Variable.h"   //包含头文件        #include "Variable.h"   //包含头文件      #include "Variable.h"   //包含头文件

...                                                                ...                                                    ...

{                                                                 {                                                      {

...                                                                 ...                                                     ...

}                                                                   }                                                      }

这种方法简单、方便。便于对变量管理和修改,也很好调试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值