C编程中使用全局变量应注意的事项

发布者:星际穿越最新更新时间:2015-01-26 来源: laogu关键字:C编程  全局变量 手机看文章 扫描二维码
随时随地手机看文章

1、尽量用局部变量替代全局变量。如果用局部变量能实现功能,最好用局部变量。

2、在函数仅仅只是要用到某个全局变量,而无需改动时,就将全局变量通过形参传
递进来,变成局部变量使用。并在定义时使用const。这是避免全局变量在函数中被
意外的改动。如在判断语句中将'=='误写成'='。这时首先因为在函数内的是局部变
量所以即使出错也不会影响全局变量和其他函数或模块。其次因为定义的是const类
型,当发生意外改动时,编译器会发出错误信息或警报,这也就是让你的程序自动
纠错。这种情况应发生在对模块内的全局变量的调用,而对于其他模块的全局变量
应通过模块接口调用。

3、中断中使用的全局变量,在其他函数内要使用时一定要进入临界区(也就是关闭
中断)。如果是使用操作系统的话,则在所有使用到与其他任务共享的全局变量的
地方都要进临界区。

4、对于仅在某个函数内使用的全局变量就用静态局部变量替代。

5、应尽量避免直接操作或调用其他模块的变量。需要调用或修改其他模块的变量
时,可以通过那个模块提供的操作接口函数进行操作。比如某个模块有一个全局的
计数值Count,则可以提供函数接口:GetCount()、SetCount()或ReloadCount()。
这样一来,其他模块要调用Count时就通过这些指定的函数接口。这样可以降低模
块间的耦合程度。另外如果嫌接口用函数实现过于复杂或是影响速度,则可以用带
参数的宏定义实现。如:
#define GetCount()  (Count)
#define SetCount(num) (Count=(num))
#define ReloadCount() (Count=0)
这样,使用时与函数调用一样,但没有函数调用时的开销。另外,功能变化是可以
将宏定义改成函数,而无需改动调用语句。

6、每个模块内的全局变量应该用静态全局变量,一来其他模块无法直接调用这些
变量;二来命名空间不会重叠,在实现一个模块时无需考虑某个全局变量的名称是
否已被其他模块使用。如在模块A中定义静态变量 static unsigned char Count;
在B模块中,仍可以定义静态变量 static unsigned char Count;这两个Count
不会相互影响,但是如果定义的是全局变量则不然。

7、模块间的耦合性就是指当修改其中某个模块时会影起其他模块运行结果发生不
可预料的变化。如果模块间是通过直接调用对方内部的全局变量来实现交互,则两
个模块间的耦合性将会变得复杂而且难以控制。而模块间的交互通过一个统一的接
口函数来实现,使得模块都无需知道对方模块内部的具体实现(这也就是面向对象
里面的封装)。当某个模块内的实现发生改写或升级时,只要确保模块接口不变即
可。这就大大降低两模块间的耦合。在规划设计模块时就应认真考虑好模块的接口,
以及与其他模块的调用关系。所以要记住编程原则:针对接口编程,而不是针对实
现。

8、函数的功能要单一,也就是高内聚性。如果某个函数需要调用很多个全局变量,
则说明函数的内聚性不够高,可以考虑将函数拆分成几个功能更单一的函数。

9、要记住编程是一种平衡的艺术。没有程序可以做到十全十美,省空间、速度快、
易扩展、易维护、低耦合、功能强大这些是不可能同时兼得的。如要提高程序的可
维护性,就必须在性能方面(空间和速度)做出一点牺牲。至于如何平衡,就要看
项目的具体要求了。

关键字:C编程  全局变量 引用地址:C编程中使用全局变量应注意的事项

上一篇:头文件中应该放些什么
下一篇:单键开关机的实现

推荐阅读最新更新时间:2024-03-16 13:52

有这10个关键点,在ARM下高效C编程没问题!
通过一定的方法来编写C程序,可以帮助C编译器生成执行速度更快的ARM代码。下面就是一些与性能相关的关键点: 1.对局部变量、函数参数和返回值要使用signed和unsigned int类型。这样可以避免类型转换,而且可高效地使用ARM的32位数据操作指令。 2.最高效的循环体形式是减计数到零(counts down to zero)的do-while循环。 3.展开重要的循环来减少循环的开销。 4.不要依赖编译器来优化掉重复的存储器访问。指针别名会阻止编译器的这种优化。 5.尽可能把函数参数的个数限制在4个以内。如果函数参数都存放在寄存器内,那么函数调用就会快得多。 6.按元素尺寸从小到大排列的方法来安排结构体,特别是在thumb
[单片机]
经典PLC编程案例:双恒压无塔供水系统
PLC和变频器都是工业控制中最常用的设备,二者可以单独使用,也可以密切配合,都能够达到自动化控制的目的,应用非常的广泛,今天就举一个具体的例子:双恒压无塔供水系统,这个系统是由变频器和PLC密切配合才能完成的,一般都在大的项目上使用。
[嵌入式]
经典PL<font color='red'>C编程</font>案例:双恒压无塔供水系统
局部变量和全局变量的区别
一. 局部变量&全局变量 1 局部变量: “在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效。 2 全局变量: “在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。   目的:增加函数间数据联系的渠道。由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其他函数中全局变量的值,相当于各个函数之间有直接的传递渠道。 为了便于区别两者,C程序设计人员有一个习惯,将全局变量名的第一个字母用大写表示。如:float Max=0,Min=0; //定义全局变量Max,Min 二. 内部函数&外部函数   1.内部函数:只被本文件中其他函数所调用。
[单片机]
PLC编程入门基础技术知识(plc原理和指令集及编程规则)
    PLC简介     可编程序控制器,英文称Programmable Controller,简称PC。但由于PC容易和个人计算机(Personal Computer)混淆,故人们仍习惯地用PLC作为可编程序控制器的缩写。它是一个以微处理器为核心的数字运算操作的电子系统装置,专为在工业现场应用而设计,它采用可编程序的存储器,用以在其内部存储执行逻辑运算、顺序控制、定时/计数和算术运算等操作指令,并通过数字式或模拟式的输入、输出接口,控制各种类型的机械或生产过程。   PLC是微机技术与传统的继电接触控制技术相结合的产物,它克服了继电接触控制系统中的机械触点的接线复杂、可靠性低、功耗高、通用性和灵活性差的缺点,充分利用了
[工业控制]
51单片机-综合例程
1.其他按键的使用 我们之前都是让P2.3输出低电平来让K1, K2, K3, K4作为独立按键,那我们要想用K13,K14,K15,K16做独立按键时只要P2.0输出低电平就可以了。下面是简化的原理图 2.美女与男人 作为本章的最后一个题目,我们结合所有学过的知识做一个综合例程,实现美女与男人的游戏的功能代码。 游戏规则如下: 美女和男人各持一枚硬币 两人都出正面时:男人得3块钱 两人都出反面时:男人得1块钱 两人出一正一反时:女人得2块钱 3.开发板的实现 我们这样做模拟,程序的开始定义两个全局变量man和woman初始化为30,意为每人各持30块钱用来显示在左右端的两个数码管上,男人的钱显示在左边的数码管,女
[单片机]
51单片机-综合例程
PLC编程循环语法使用方法
所有计算机编程语言,都有循环的功能。 PLC也是。 所以当然有循环功能。 不管什么CPU,什么编程语言,都有循环语法,可以用于实现循环。当然,很多时候,语言对循环支持的并不够理想。通常还要有指针,间接寻址等配合。所以在PLC编程中,属于难度比较高的题目。 我知道,有一些人,对掌握循环编程语法很在意,也有一些人,对自己搞不好循环而很头疼。 今天分析一下这个问题。 首先,我们看循环编程方法的意义。几个方面: 1, 提高CPU的工作效率; 2, 降低程序代码数量,减少内存使用。 3, 降低编程时的工作量。 首先看1,你只要用类似FOR…NEXT的循环语句,对CPU的工作量其实是没有多少改善的。循环100次,和写100行,并没有区别。
[嵌入式]
PL<font color='red'>C编程</font>循环语法使用方法
PLC编程语言的类型和具有哪些特点
  PLC编程语言是工业控制领域内用于编写PLC程序的语言,旨在实现对工业设备和生产流程的自动化控制和监测。PLC编程语言包含多种语言类型,如图形化编程语言、文本化编程语言、结构化编程语言等,可根据不同应用场景和编程需求进行选择和组合。   PLC编程语言的使用具有简单、高效、可靠等特点,能够与多种不同类型的设备和系统集成使用,同时支持实时监测和控制。常用的PLC编程语言有以下几种:   1. Ladder Diagram(梯形图)   2. Instruction List(指令列表)   3. Function Block Diagram(功能块图)   4. Structured Text(结构化文本)   5. Seq
[嵌入式]
51单片机C编程(一、跑马灯)
//这是一个51单片机的跑马灯C程序,已经在PROTEUS软件上仿真通过 #include reg51.h void delay(int); void main() { int i; P0=0x01; delay(500); while(1) { for(i=0;i 7;i++) { P0 =1; delay(500); } P0=0x01; delay(500); } } void delay(int x) { int i,j; for(i=x;i 0l;i--) for(j=110;j 0;j--); }
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved