打印

讨论帖:如何在C编程中尽量避免使用全局变量?

[复制链接]
7183|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mindor|  楼主 | 2010-5-8 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Mindor 于 2010-5-8 17:18 编辑

众所周知,在C编程中大量使用全局变量是有风险的,虽然有时候使用全局变量也能带来高效率。
比如,全局变量生存中期长,将会占用更多的内存。又比如一个全局变量发生了变化就比较不容易找出是哪里改变的等等。。。

欢迎大家讨论自己是怎么避免使用全局变量的,用什么方法避免?

在这里我想问一个,中断函数中用到的变量是不是一定要是全局变量?

相关帖子

沙发
NE5532| | 2010-5-8 17:32 | 只看该作者
“比如一个全局变量发生了变化就比较不容易找出是哪里改变的”
那看你写汇编的时候咋办。

使用特权

评论回复
板凳
McuPlayer| | 2010-5-8 17:34 | 只看该作者
汇编也支持局部变量
有的连接器还提供局部变量的智能覆盖

使用特权

评论回复
地板
zdhlixiang2006| | 2010-5-8 18:32 | 只看该作者
一般我是这么做的:能用返回值的话就不会开辟中转的空间;使用位定义,这样也可以大大节省空间

使用特权

评论回复
5
aceice| | 2010-5-8 19:30 | 只看该作者
参考消息机制
个人习惯用全局变量

使用特权

评论回复
6
Mindor|  楼主 | 2010-5-8 19:54 | 只看该作者
4# zdhlixiang2006
好像位定义中,每个位都分配一个对应的字长单元吧?

使用特权

评论回复
7
evilive| | 2010-5-8 21:09 | 只看该作者
我个人认为全局变量用的比较方便,定义好之后,随便哪里都可以调用,当然,变量在什么时候赋值,这个编程者肯定要十分清楚!

使用特权

评论回复
8
zdhlixiang2006| | 2010-5-10 13:47 | 只看该作者
一个char型全局全局变量可以定义8个bit变量

使用特权

评论回复
9
yewuyi| | 2010-5-10 14:48 | 只看该作者
LZ的结论就有问题,全局变量从来都是尽量少用,但从来没说尽量‘避免’使用。

这可是两回事情,如果没有理解这些区别的话,哈哈,是需要再面壁思过的哦

使用特权

评论回复
10
Mindor|  楼主 | 2010-5-10 20:37 | 只看该作者
9# yewuyi
好吧。。。我错了。。。
那怎么少用全局变量又有什么方法呢?嘿嘿

使用特权

评论回复
11
mcuisp| | 2010-5-10 20:53 | 只看该作者
该全局就全局,该局部就局部。

使用特权

评论回复
12
wgggjfg| | 2010-5-22 21:30 | 只看该作者
多用指针,移植性好

使用特权

评论回复
13
xlsbz| | 2010-5-22 21:51 | 只看该作者
12# wgggjfg

写库的话 用点指针 还说得过去

平时写程序还是少用指针

使用特权

评论回复
14
xlsbz| | 2010-5-22 21:51 | 只看该作者
10# Mindor

弄参数啊 叫局部参数吧

使用特权

评论回复
15
呆板书生| | 2010-5-23 07:21 | 只看该作者
同意9楼的说法,

至于如何少用,那是要具体问题具体分析了

使用特权

评论回复
16
后学| | 2010-5-23 09:00 | 只看该作者
尽量写高内聚,低耦合的代码,

使用特权

评论回复
17
一棵小草| | 2010-5-23 14:37 | 只看该作者
该全局就全局,该局部就局部。
mcuisp 发表于 2010-5-10 20:53

:victory:
全局变量,没有避免使用的情况,只有少用的情况。我认为,能用局部变量的尽量用,不能用的情况才用全局变量。

中断函数跟子函数一样的道理,一样都能用局部变量。区别只是,中断条件满足,程序会“智能”的跳到中断函数,子函数要你手动跳转罢了。

尽量少用全局变量,要看你的习惯了。
写子函数的时候,最好想一想,能不能把子函数规范化。就是说,一个子函数,要尽可能的被多次调用,同时也要想想,怎么让这个子函数的作用强大。如果常常这样想,你就会喜欢使用带参数函数,带返回值函数。这样,会常常使用局部变量,所以全局变量就少用了。

即使是使用了全局变量了,也要尽可能的发挥其优点。一个全局变量能有多个功能更好,没有多个功能,有2个也不错。就是说,有些函数的功能,可以用定义过的全局变量来实现的,就不要再重新定义一个新的全局变量了。我看有些高手更绝,一个功能,由定义过的2个全局变量配套来使用,打死也不多定义全局变量,嘿嘿-------

还有就是程序结构的问题了,我认为,可以分多个文件编译。比如
main.c 中,有main.c的局部变量和全局变量
同样的道理,Io.c中有Io.c的局部变量和全局变量----------
这样分开编译的.obj的目的就是尽量少用全局变量的情况,而且可以避免很多错误的情况,很多人都这样用吧。特别涉及到OS的,几乎都是这样的结构,51的应该很不多吧,不过也可以这样用。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Mindor + 1 好~
18
chongqingmips| | 2010-5-23 15:57 | 只看该作者
受教了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

413

帖子

1

粉丝