如何在c语言中定义及引用全局变量?

答案:5  信息版本:手机版

解决时间 2019-10-03 10:30

已解决

2019-10-02 15:19

如何在c语言中定义及引用全局变量?

最佳答案

2019-10-02 16:05

1、全局变量也称为外部变量,它是在函数外部定义的变量。

它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。

只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。

但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的

结尾。在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。

有时需要在其他文件中使用extern来声明外部变量,以扩展外部变量的作用域。

也可用static声明外部变量,使该变量不能被其他文件引用。有时候他们是一样的,只有稍微一点的区别而已,不用太过于区分的。

2、定义及引用方法:

#ifdef xxx_GLOBALS

#define xxx_EXT#else#define xxx_EXT extern

#endif 上面位于.H 文件中,每个全局变量都加上了xxx_EXT的前缀,xxx代表模块的名字。该模块的.C文件中有以下定义:#define xxx_GLOBALS

当编译器处理.C文件时,它强制xxx_EXT(在相应.H文件中可以找到)为空,(因为xxx_GLOBALS已经定义)。所以编译器给每个全局变量分配内存空间,而当编译器处理其他.C文件时,xxx_GLOBAL没有定义,xxx_EXT被定义为extern,这样用户就可以调用外部全局变量。进阶:在abc.H:#ifdef abc_GLOBALS

#define abc_EXT#else

#define abc_EXT extern#endif

abc_EXT unsigned int Ctr;

同时,abc.H有中以下定义:#define abc_GLOBALS

当编译器处理abc.C时,它使得头文件变成如下所示,因为abc_EXT被设置为空。unsigned int Ctr;

这样编译器就会将这些全局变量分配在内存中。当编译器处理其他.C文件时,头文件变成了如下的样子,因为abc_GLOBAL没有定义,所以abc_EXT被定义为extern。extern unsigned int Ctr;

在这种情况下,不产生内存分配,而任何 .C文件都可以使用这些变量。这样的就只需在 .H 文件中定义一次就可以了。

全部回答

1楼

2019-10-02 19:08

如果全局变量在同一个C文件中,则可以直接去使用这个全局变量,就像楼上(zsx10110)举的那个例子一样,但是在另外一个C 文件中还想继续使用这个变量的时候就需要使用extern来声明引用这个全局变量了,比如说你把全局变量定义声明在a.c文件中的,你在b.c文件中也想使用,则在里面加上这句extern int a;(int a是你在a.c中定义的,视实际情况而定)

2楼

2019-10-02 18:28

放置于主函数之前定义的变量。

3楼

2019-10-02 17:31

全局常量定义,在主函数体外部直接调用预处理命令#define 常量名 量值

引用时可以再任意函数体内直接调用该常量名

全局变量定义,变量不存在全局概念,只有相对概念。你可以通过声明作用域来进行声明。比如:

std::a。这就是一种。

4楼

2019-10-02 16:23

举个例子

#includeint a =0;//这里不就是定义了一个全局变量a了吗

int main()

{

printf("%d",a);

}

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

c语言 引用定义变量,如何在c语言中定义及引用全局变量?相关推荐

  1. c语言stm8变量存储类型,STM8使用----STVD(COSMIC)定义变量指定其类型和位定义

    STM8使用----STVD(COSMIC)定义变量指定其类型和位定义 http://www.51hei.com/bbs/dpj-31009-1.html (出处: 单片机论坛) stm8 stvd下 ...

  2. 汇编语言定义变量c,汇编c语言变量

    广告 Apple iPad,AirPods Pro,Bose耳机,机械键盘,健身环等着您 由于c ++支持重载,因此可以使用相同的函数名称但不同的参数类型定义函数. 在编译期间,编译器根据函数的参数类 ...

  3. C语言块级变量:在代码块内部定义的变量

    所谓代码块,就是由{ }包围起来的代码.代码块在C语言中随处可见,例如函数体.选择结构.循环结构等.不包含代码块的C语言程序根本不能运行,即使最简单的C语言程序(上节已经进行了展示)也要包含代码块. ...

  4. C语言里 指针变量强制类型转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...

    强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...

  5. php中请写出定义变量的两种方法,php定义变量几种

    1.定义常量define("CONSTANT", "Hello world."): 常量只能包含标量数据(boolean,integer,float 和 str ...

  6. 如何在shell脚本中定义数组及遍历

    问题起源:脚本中定义多个监控模块,代码重复率高,仅仅模块名不同,所以思考如何精简代码? 1.如何定义数组及访问数组: var=(1 2 3 4 5) var=(a b c d e) var=('1' ...

  7. c语言中结构体类型定义的函数指针,结构体中定义函数指针

    结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...

  8. python如何定义变量a_简述如何用Python定义一个变量类型?

    本文主要讲述了如何去定义一个Python变量,变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型. 变量在程序中就是用一个变量名表示了,变量名必 ...

  9. Iar环境c语言调用汇编函数,如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?...

    我在硬故障处理程序中有一些程序集.程序集基本上是为了传递当前堆栈指针作为参数(在R0中).它看起来像这样...如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数? __asm(&quo ...

最新文章

  1. 如何用matlab测a相相电流,电流平均值谐波检测方法MATLAB仿真
  2. 1.1 计算机视觉-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. powerBi odbc 连接impala 实现自助分析
  4. MyBatisPlus查询方法selectById、selectOne、selectBatchIds、selectByMap、selectPage的使用
  5. Easy Multiplication 快速傅里叶变换
  6. 和 jQuery 说再见,Bootstrap 5 将移除对其依赖
  7. MTK eCos系统的有线驱动收包流程
  8. 据我所知目前就只飞秋表情库
  9. 2019最受欢迎语言_2019年100最受欢迎的免费在线课程
  10. idea设置主题风格
  11. 新农合医疗保险补偿制度
  12. 《Spring实战》读书笔记-第6章 渲染Web视图
  13. 【线性代数】矩阵的初等变换与线性方程组
  14. HIFI音频解码芯片ES9023
  15. transition动画效果
  16. JAVA—— AJAX
  17. 域环境SID相同到底有什么影响?
  18. IMAX在中国的影院网络将近一千家;乐高计划2021年在中国开设80家品牌零售店 | 美通企业日报...
  19. python之torchlight使用_《火炬之光2》功能型MOD制作教程
  20. cocos2d-x win32运行时报opengl 版本过低

热门文章

  1. 在线客服系统访客发送录音功能,在elementui中使用js-audio-recorder实现录音功能,然后上传文件发送出去...
  2. word中取消链接上一节在哪_word中如何断开与前一节的页眉链?
  3. SVN覆盖本地文件和误删文件的恢复方法
  4. 完全在GNU/Linux下工作
  5. 华为eNSP实验-组播服务器实验
  6. android manager provider模式,安卓情景模式开发(一)-控制GPS/WIFI/蓝牙/飞行模式...
  7. Android 动画—补间动画
  8. dnf能测试套装的软件,(资料站)教你选择合适的装备 DNF套装介绍
  9. 使IFRAME在iOS设备上支持滚动
  10. BCI Competition IV 2a数据集介绍