- 8
- 0
- 约4.35千字
- 约 4页
- 2017-02-09 发布于重庆
- 举报
C程序的外部变量与函数
C 程序的外部变量与函数
摘要
本文讨论了C程序的外部变量和函数的一些性质,结合实际的编程,给出了使用外部变量和函数的方法。
关键字:C程序,外部变量,函数
C程序由一组对象组成,这些对象包括程序中所使用的变量和实现特定功能的函数。变量可以分为函数内部定义、使用的变量和函数外部定义的变量,通常情况下,把函数内部定义、使用的变量称为内部变量或局部变量,而将在函数外部定义的、供许多函数所使用的变量称为外部变量,一般情况下,也可以称为全局变量。
由于C语言不允许在一个函数中定义其他函数,因此函数本身是外部的。一般情况下,也可以说函数是全局函数。
在缺省情况下,外部变量与函数具有如下性质:所有通过名字对外部变量与函数的引用(即使这种引用来自独立编译的函数)都是引用的同一对象(标准中把这一性质称为外部连接)。
由于外部变量是可以全局访问的,这就为在函数之间交换数据提供了一种可以替代函数变元欲返回值的方法。任何函数都可以用名字来访问外部变量,只要这个名字已在某个地方做了说明或定义。
如果要在函数之间共享大量的变量,那么使用外部变量要比使用一个长长的变元表更方便、有效。然而,也可能导致程序在各个函数之间产生太多的数据联系。
外部变量的用途还表现在它们比内部变量有更大的作用域和更长的生存期。内部自动变量只能在函数内部使用,当其所在函数被调用时开始存在,当函数退出时消失。而外部变量是永久存在的,他们的值在从一次函数调用到下一次函数调用之间保持不变。因此,如果两个函数必须共享某些数据,而这两个函数都互不调用对方,那么最为方便的是,把这些共享数据作为外部变量,而不是作为变元来传递。
1、外部变量的定义和使用
根据C语言标准,在程序的所有源文件中,外部变量只能被定义一次,否则会导致重复定义的编译错误。
1.1 外部变量的定义与声明
变量声明用于通报变量的性质(主要是变量的类型),而变量定义则除此之外还引起存储分配。如果在函数的外部包含如下说明:
int VarDesc;
char Array[MAXVAL];
那么这两个说明定义了外部变量VarDesc与Array,并为之分配存储单元,同时也用作供源文件其余部分使用的说明。另一方面,如下两行:
extern int VarDesc;
extern char Array[];
为源文件剩余部分声明了VarDesc是一个int 类型的外部变量,Array是一个char数组类型的外部变量(数组大小在其他地方确定),但这两个声明并没有建立变量或为它们分配存储单元,其中关键字extern表明该外部变量在其他地方被定义。
根据C语言标准,外部变量虽然只能在某个文件中定义一次,但其作用域则是从其声明处开始一直到其所在的被编译的文件的末尾。因此其他文件可以通过extern说明来访问它。
1.2 外部变量的使用方式
如果外部变量被不同的函数所引用,并且这些函数没有集中在一个源文件中,而是分布在不同的源文件中,那么函数在引用这些外部变量时,必须采取先声明再使用的方式,否则,在编译时会导致重复定义的编译错误。
若在多个文件的多个函数中引用外部变量,就需要在这些函数中重复声明外部变量。这种方式可以解决编译问题,但是代码不够简洁。因此,在实际的编程中,大都采取了将外部变量统一定义在一个C源文件中,这个C源文件一般被称为global.c,然后在对应的头文件中,一般为global.h,声明外部变量,最后在需要引用外部变量的源文件中使用#include global.h的方式,函数就可以引用所有的外部变量。因此,一般情况下,global.c内容为:
#include global.h
/* for example, define two vars */
int VarDesc;
char Array[MAXVAL];
/* other external var define */
在对应的global.h头文件的内容则为:
#ifndef _GLOBAL_H /* please insure _GLOBAL_H unique */
#define _GLOBAL_H /* avoid quotation iterativly */
#ifdef __cplusplus
extern C {
#endif /*__cplusplus */
/* for example, declare two vars */
extern int VarDesc;
extern char Array[];
/* other external vars declaration */
#ifdef __cplusplus
}
您可能关注的文档
- CPLD在DSP系统中的应用设计.doc
- CPLD在嵌入式系统与CAN总线网络通信中的应用.doc
- CPLD的占空比频率可调矩形波发生器设计.doc
- CPSM常见问题解答.doc
- cpld与SDRAM图像处理.doc
- CppUnit安装及使用指南_tlf.doc
- CPU和显卡风扇的问题和解决方法.doc
- cpu处理器的区别.doc
- CPU基础知识T.doc
- cpu工作原理浅析.doc
- 2026年及未来5年内中国液体氩气行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国黄铜合页行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国竹工艺家具行业投资前景及策略咨询研究报告.docx
- 2025年中国微机数显自动分析仪市场调查研究报告.docx
- 2026年及未来5年内中国微尘白色粉笔行业投资前景及策略咨询研究报告.docx
- 2025年中国微电脑型压胶机市场调查研究报告.docx
- 2026年及未来5年内中国数字化等功游泳训练测试系统行业投资前景及策略咨询研究报告.docx
- 2025年中国圆形花瓶市场调查研究报告.docx
- 2026年及未来5年内中国植物纤维静淀过滤器行业投资前景及策略咨询研究报告.docx
- 2025年中国超音波手套机市场调查研究报告.docx
最近下载
- 医院财务管理制度.docx
- 2025年2月26日西安市军队文职面试真题及答案解析(计算机岗).doc VIP
- (苏教版)数学五年级上册寒假“天天练”作业设计,含30份题组,附参考答案.pdf
- 鸡胴体等级及要求、鸡分割肉等级及要求.pdf VIP
- 2025年青岛酒店管理职业技术学院单招语文考试题库及答案解析.docx VIP
- 北师大版高中英语选择性必修第二册unit6 lesson3课文英汉对照.docx VIP
- 水利厅水利工程招投标管理工作手册(标准版).doc VIP
- 山东单招语文题库及答案.doc VIP
- 八项基本管理技能.pdf VIP
- 深度解析(2026)《YST 1777-2025微纳米铜粉》:新材料产业精细化、高端化发展的权威指南与未来展望.pptx VIP
原创力文档

文档评论(0)