打印

一线研发之声:嵌入式C编程经验 之 全局变量猛于虎

[复制链接]
楼主: sedatefire
手机看帖
扫描二维码
随时随地手机跟帖
161
xdata| | 2013-12-15 20:32 | 只看该作者 回帖奖励 |倒序浏览
这个确实受教了,我以前写代码就是一大堆全局变量

使用特权

评论回复
162
韦贵山| | 2013-12-28 16:50 | 只看该作者
小菜鸟看大牛

使用特权

评论回复
163
天师猫神| | 2014-1-3 09:39 | 只看该作者
学习了。学习了。

使用特权

评论回复
164
z755924843| | 2014-1-3 16:08 | 只看该作者
好文 看到“在.h文档里面定义许多杂乱的结构体,extern一堆令人头皮发麻的全局变量”的时候 突然发现自己就是这样的人啊。一语惊醒梦中人,顶:hug:

使用特权

评论回复
165
tanxin2721| | 2014-1-3 22:10 | 只看该作者
虽然是菜鸟,但是觉得说的牛,最近调试一程序,却是是在不断在补丁,出现好多问题,其中就有中断函数里面引入全局变量引发的一些列问题,现在还没调出来。;。。。。。

使用特权

评论回复
166
天师猫神| | 2014-1-5 08:48 | 只看该作者
LZ写的不错,

使用特权

评论回复
167
xiang2580| | 2014-1-7 10:56 | 只看该作者
再顶顶!

使用特权

评论回复
168
songxu125400| | 2014-1-10 14:37 | 只看该作者
写得很好,有同感

使用特权

评论回复
169
tianjiahe| | 2014-2-5 14:08 | 只看该作者
我又跳到一个公司,遇到与楼主一模一样的问提,可以说是全部对应上中大奖了,我看到全程变量的滥用,并引发很多个棘手的问题,大量的问题亟待处理,我尝试增新功能,又必须定义全程变量。前任已经干了10年去年走的,之前他工资1万多是公司绝对离不开的人物。我基本确定他新的功能搞不定了。烂摊子到我这里,只有3万行烂代码,我之前没搞过ARM,只搞过51单片机,看了写ARM资料,用近一个月时间,基本搞清楚这个软件做了什么功能,源代码没有价值了,肯定要重写,因为现在硬件不允许改,我花了2个月时间,在年前移植了一个ucOS内核,写完了底层驱动,让整个机器外设都跑起来,今年准备全力写应用。我相信我能比前人做的更好,有了OS,我相信程序结构和流程应该会好些,但具体会有哪些变化,它的流程是怎么控制的,我心里没底,在这方面也没多少经验,真心期望高手给个指点,先谢谢了。

使用特权

评论回复
170
5IGer| | 2014-2-17 21:40 | 只看该作者
受教了!!!!

使用特权

评论回复
171
ff8zgs| | 2014-2-20 11:33 | 只看该作者
如果 一个程序到处都是全局变量 那么只能说这个工程师还没有程序结构和分层的概念,这种程序到最后只能死掉,我手上就有前人留下的这种代码,到处都是全局变量。到现在我只要修改一点点,就会出现内存分配不了,或者一些奇奇怪怪的问题。增加一个小小的功能,结果调试代码要花费几天时间。现在正在准备重写代码。

使用特权

评论回复
172
sedatefire|  楼主 | 2014-3-1 13:10 | 只看该作者
唉,时隔一年,看到自己以前写的**。
好有灵性,好有冲劲...
怎么感觉就老了很多的样子,时间都去哪儿啦。

使用特权

评论回复
173
sedatefire|  楼主 | 2014-3-1 13:14 | 只看该作者
杨工 发表于 2012-1-10 12:03
同意楼主,但是全局变量只不过是最表面的祸首。
还需要学习C++的思想,能把C++的思想应用到C编程里,才是较 ...

自觉面向对象的c写法颇有心得。
this指针实现,
要引入malloc才能实现private。
大量的函数指针,实现虚函数/重载等。
也就那么一回事儿
最终,我的每个类接口,只有"new(init)"和"free"两个。
其他所有的public接口,都化为函数指针。

但,对于嵌入式来说,面向对象C写法有一个小瑕疵。
空间效率不高,有些没有用的的接口,一样链接到code区里。

使用特权

评论回复
174
john_lee| | 2014-3-1 17:09 | 只看该作者
让函数指针指向某函数,当然会把这个函数链接进来,对C来说,由于语言本身的表达力不足,所以需要编程者细腻地操作和定义(一些非常底层)的代码和数据,才能比较好地控制效率和开销,但这种操作对于软件分层的设计来说,很多都会跨越修改各个层次,违反了“开闭原则”,是分层设计的大忌。

使用特权

评论回复
175
zzzzzx| | 2014-3-4 22:34 | 只看该作者
这么多的人都不赞成过多使用全局变量。但是我有一个问题。当采用多文件模块编程,比如,一个项目分别划分为键盘处理模块,显示模块,FLASH存取模块,D/A输出模块等。当操作按键后,在键盘处理模块中改变了一些参数(变量);当进入显示模块后,取出这个变量去显示;当进入FLASH存取模块后,存储这个变量;当进入D/A输出模块后,输出对应的模拟量。请问,如果不用全局变量的话,用什么呢?

使用特权

评论回复
176
jeff_yunyi| | 2014-3-5 10:59 | 只看该作者
写得不错,经验之谈

使用特权

评论回复
177
szyijitong| | 2014-3-14 21:53 | 只看该作者
呵呵。。。

使用特权

评论回复
178
萧十一郎hot| | 2014-11-4 15:04 | 只看该作者
感觉好迷茫。

使用特权

评论回复
179
wyq165| | 2014-11-4 15:52 | 只看该作者
我也感觉好迷茫。
内心里也很赞同楼主的观点。
可是在实际过程中,很多地方感觉,如果用局部,可能又要多加很多不必要的流程。
曾有偏移说他们公司,基本上都不会用全局变量.模块与模块间的IO全部用 接口(也就是函数实现。)
后来我曾试验过。发现一下子多了很多接口函数,或者宏。
看来自己还是没学到家啊。

使用特权

评论回复
180
578896817fyt| | 2014-11-6 17:41 | 只看该作者
前辈,因为之前只听过堆栈溢出,而没听过栈溢出,请问假如我定义了9个局部变量,单片机只有八层堆栈,这样会不会导致栈溢出呢?帖子那么久了不知道前辈是否看得到我的问题

使用特权

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

本版积分规则