打印
[C语言]

全局变量

[复制链接]
2030|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
langgao183|  楼主 | 2014-6-12 08:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问二姨家的大牛们:有人说尽量少用全局变量,而使用局部变量。但是我的程序里基本都是全局变量,局部用的很少。不知道大牛们怎么看看待全局与局部的使用问题

相关帖子

沙发
ayb_ice| | 2014-6-12 09:08 | 只看该作者
基本观念肯定是对的

如果全局变量较多,最好保证仅在某个函数,或某个模块可改变其值,其它地方只读

使用特权

评论回复
板凳
zhaoyu2005| | 2014-6-12 10:57 | 只看该作者
在一定环境下,尽量少用;不是说一定不能多用,有的情况必须很多全局变量。尽量少用是针对有的人:函数内基本不用局部变量(当然是有用到的情况),全部用用全局变量;必须用的情况当然要用

使用特权

评论回复
地板
原野之狼| | 2014-6-12 11:40 | 只看该作者
局部变量能干的事就不要麻烦全局变量了。
另外能静态的就尽量在模块内静态吧,比如:
static int g_foo;

使用特权

评论回复
5
ZG11211| | 2014-6-12 13:50 | 只看该作者
这个东西要自己编程中慢慢总结了。

使用特权

评论回复
6
江枫渔火| | 2014-6-12 22:59 | 只看该作者
基本不用全局变量,全局的只是函数

使用特权

评论回复
7
ballack_linux| | 2014-6-12 23:14 | 只看该作者
用全局变量是会导致可重入的问题的,这种情况在操作系统中比较常见。

使用特权

评论回复
8
miaozhendaoren| | 2014-6-12 23:33 | 只看该作者
局部变量用太多了,也会爆栈!

使用特权

评论回复
9
hfuter| | 2014-6-13 00:37 | 只看该作者
全局变量、局部变量,各有好处吧。
全局变量可以在各个函数里修改,一旦出了问题,不是很容易查出问题所在。
利用全局变量设置信号量,倒是很容易在函数间传送信息。

使用特权

评论回复
10
南北lpc| | 2014-6-13 01:10 | 只看该作者
作为一个后辈,前辈们能不能讲一下什么叫做爆栈

使用特权

评论回复
11
popeye021| | 2014-6-13 09:30 | 只看该作者
南北lpc 发表于 2014-6-13 01:10
作为一个后辈,前辈们能不能讲一下什么叫做爆栈

堆栈区溢出

使用特权

评论回复
12
langgao183|  楼主 | 2014-6-13 10:48 | 只看该作者
谢谢大牛们的支教啊

使用特权

评论回复
13
langgao183|  楼主 | 2014-6-13 13:46 | 只看该作者
江枫渔火 发表于 2014-6-12 22:59
基本不用全局变量,全局的只是函数

这句不是很理解,能详细讲讲吗?

使用特权

评论回复
14
游子| | 2014-6-13 15:46 | 只看该作者
用全局变量,编译器不知道啥时你不用,它给分配一个内存一直不释放也不给别人用。局部变量,编译器知道函数结束或者函数内不使用后,它就分配给别人用。全局变量用得多你内存一定用得多,本来只用一片SRAM 1K能搞定的芯片,你可能要换有4K的才能搞定。
用全局变量,你编程得时时刻刻注意它是全局的,你不好分析在使用时它的初值是多少,任意修改可能无法预知后果,调试时也难于发现是代码段相互影响引起的问题。局部的作用域在函数之内,第一次使用之前可放心初始化。
所以尽量用局部变量,少用全局变量

使用特权

评论回复
15
langgao183|  楼主 | 2014-6-13 16:57 | 只看该作者
游子 发表于 2014-6-13 15:46
用全局变量,编译器不知道啥时你不用,它给分配一个内存一直不释放也不给别人用。局部变量,编译器知道函数 ...

一个5K的程序,用了130byte的全局变量,算正常吗?

使用特权

评论回复
16
xyz549040622| | 2014-6-13 17:01 | 只看该作者
能运行的程序才是好程序,只要你看得懂,写出来无BUG

使用特权

评论回复
17
roykin| | 2014-6-13 17:19 | 只看该作者
游子 发表于 2014-6-13 15:46
用全局变量,编译器不知道啥时你不用,它给分配一个内存一直不释放也不给别人用。局部变量,编译器知道函数 ...

学习了。。感谢!

使用特权

评论回复
18
江枫渔火| | 2014-6-13 20:38 | 只看该作者
langgao183 发表于 2014-6-13 13:46
这句不是很理解,能详细讲讲吗?

就是,全局变量只限制在模块内访问,模块外需要通过接口函数来访问模块内的变量。我目前偏向这样做。全局变量要经量少。但如果你需要大容量缓存,你还用局部变量,那是要爆炸的~

使用特权

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

本版积分规则

23

主题

112

帖子

1

粉丝