【编程技巧】解耦——避免全局变量

全局变量在整个源文件中,相当于一条直达快捷的车道。

一语点醒梦中人:在这里给全局变量赋值A,B,C,在那边分析A,B,C决定做什么?这有什么不对么?

设计代码时,分设备层、应用层。分层设计就是为了解耦,否则,修改一个功能,可能要掘地三尺的修改应用层和设备层。

全局变量在多处被修改,不容易阅读和理清楚其逻辑,维护起来比较麻烦。

存在的即是合理的,该用还要用,要知道哪些情况尽量避免使用,哪些情况可以使用?

单片机小程序,如果使用全局变量会比较简单明了,否则各种函数传递来替代全局变量的功能,反而不好。

没有局部变量入栈出栈的步骤,使程序速度快一些。

全局变量可以恰当的使用,使用原则:

1、可以使程序简单

2、可以使阅读明了

4、可以使方便维护

就放心大胆的使用吧。

附录:

全局变量的知识:

1、全局变量和局部变量同名

局部变量有效,不会使用全局变量。一个函数内可以在不同地方定义同名局部变量,只要规范好其作用域即可, 此时局部的局部变量会有效。遇到同名,作用域大的会失效。

2、头文件中定义全局变量

可以,但不推荐。定义变量最好在.c,在.h中进行声明。就像也可以在.h中定义函数,但不推荐。为什么要出现.c.h两种文件,就像男人和女人一样,发挥其特长才是正道。

3、static全局变量和全局变量

作用域不同。static修饰的,作用域限定在此.c中,没有被static修饰的,作用域为全project。函数也是。static知识点详细见另一篇博文。

4、静态存储变量和动态存储变量

程序运行期间,根据需要,临时动态分配存储空间的变量,为动态存储变量。永久占用固定内存的变量,成为静态存储变量。学习一下DSP的cmd文件配置,代码、变量都存储在什么地方。

5、全局变量的改变

如果中断中有全局变量,则程序运行期间,此全局变量可能会被意外改变,需要完善考虑。

参考资料:http://blog.sina.com.cn/s/blog_438972de0101as5k.html

时间: 2024-12-20 07:21:57

【编程技巧】解耦——避免全局变量的相关文章

编程技巧之表格驱动编程

/* Image format-dependent operations. */ typedef struct { jas_image_t *(*decode)(jas_stream_t *in, char *opts); /* Decode image data from a stream. */ int (*encode)(jas_image_t *image, jas_stream_t *out, char *opts); /* Encode image data to a stream.

ZStack中的编程技巧

1. 像函数一样使用的宏 //这个宏,用来被其他宏使用,构造一个正确有效的表达式.这个适合于一些离散语句的组合,不适合函数的重新命名 #define st(x)      do { x } while (__LINE__ == -1) 例如:#define aps_GroupsRemaingCapacity() ( APS_MAX_GROUPS - aps_CountAllGroups() ) 上述的这个宏,调用的其他函数来实现其功能,因此,不适合使用st()宏. 使用场景:  aps_Grou

【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面

(一)概要: 文章描述了怎样通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于单文档程序(SDI)我们可以很方便利用微软提供的组件Visual C++ Component (Splash Screen).因为在Microsoft Visual Studio 6.0以后的版本或者Visual C++ .NET没有提供这个组件,我们可以通过自定义对话框来实现Splash Screen

单片机应用编程技巧问答

1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言.其主要优点是占用资源少.程序执行效率高.但是不同的CPU,其汇编语言可能有所差异,所以不易移植. C语言是一种结构化的高级语言.其优点是可读性好,移植容易,是普遍使用的一种计算机语言.缺点是占用资源较多,执行效率没有汇编高. 对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM.RAM.STACK等资源都有限,如果使用C语言编写,一条C语言指令编译

Phaser 编程技巧

2015年2月6日 欢迎! 在连续几周讨论了平台跳跃游戏的机制之后,我们也应该休息一下了.因此,本周的教程将基于论坛上经常谈论的特性:网格运动,或者可以说得更加明确一点:如何像Pacman(译者注:在红白机上叫做吃豆子,或者小精灵)那样在网格中移动. 我们本周讨论的代码可以让玩家优雅地在瓦片地图中移动,在很小的空间中转弯.我们还将构建Pacman游戏的核心代码. 获取源代码 在这里我只会着重高亮最重要的部分代码.所以请先浏览一下代码.如果你对一些代码有疑问,你可以去论坛询问. 运行/编辑汽车游戏

java命名规范和编程技巧

一个好的java程序首先命名要规范. 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,方便维护等作用 Package 的命名 Package 的名字应该都是由一个小写单词组成. Class 的命名 Class 的名字必须由大写字母开头而其他字母都小写的单词组成 Class 变量的命名 变量的名字必须用一个小写字母开头,后面的单词用大写字母开头. Static Final 变量的命名  Static Final 变量的名字应该都大写,并且指出完整含义. 参数的命名

分享25个实用的博客,有助你提高编程技巧

编程是一个不断变化的领域,一旦你选择了它作为你的职业,你就不可能停下学习的脚步了.因为科技的发展月新日异,要跟得上它发展的脚步,你必须不断地努力学习.在Forbes.com最近发表的一篇文章(25 Practical Blogs To Sharpen Your Coding Skills)中,作者Tomas Laurinavicius 推荐了25个他认为很适合程序员或学习编程的人在工作或学习中阅读的博客. 1. Scott Hanselman 在微软担任网络平台开发的Scott Hanselma

Python高效编程技巧

下面我挑选出的这几个技巧常常会被人们忽略,但它们在日常编程中能真正的给我们带来不少帮助. 1. 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions) 大多数的Python程序员都知道且使用过列表推导(list comprehensions).如果你对list comprehensions概念不是很熟悉——一个list comprehension就是一个更简短.简洁的创建一个list的方法. >>> some_list = [1,

Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之--找出Matlab内置函数中,已经大概的介绍了matlab内置函数在混合编程中的优点,并通过程序找出了matlab中的大部分内置函数,当然更多人关心是如何像我所说得那样,不用直接编译,就直接在C#中调用这些内置函数.本文就带你揭开这些谜团. 声明,这篇文章是需要一点点混合编程基础的,基本概念和过程要懂一点,如果能简单成功混编一个简单的计算或者绘图例子

Matlab.NET混合编程技巧之——找出Matlab内置函数

原文:[原创]Matlab.NET混合编程技巧之--找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破脑袋,加班几个晚上,调试才能解决.同样,由于Matlab.NET混编的特殊性,加上MathWorks的原因,英文文档和没有披露一些详细的细节(甚至不允许反编译MWArray.dll,呵呵,它不允许,不代表你不会哦).经过很多项目,和大量的实验,也发现了一些小技巧和小秘密,今天就分享其中一个,先做一个