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

[复制链接]
44744|195
xdata 发表于 2013-12-15 20:32 | 显示全部楼层
这个确实受教了,我以前写代码就是一大堆全局变量
韦贵山 发表于 2013-12-28 16:50 | 显示全部楼层
小菜鸟看大牛
天师猫神 发表于 2014-1-3 09:39 | 显示全部楼层
学习了。学习了。
z755924843 发表于 2014-1-3 16:08 | 显示全部楼层
好文 看到“在.h文档里面定义许多杂乱的结构体,extern一堆令人头皮发麻的全局变量”的时候 突然发现自己就是这样的人啊。一语惊醒梦中人,顶:hug:
tanxin2721 发表于 2014-1-3 22:10 | 显示全部楼层
虽然是菜鸟,但是觉得说的牛,最近调试一程序,却是是在不断在补丁,出现好多问题,其中就有中断函数里面引入全局变量引发的一些列问题,现在还没调出来。;。。。。。
天师猫神 发表于 2014-1-5 08:48 | 显示全部楼层
LZ写的不错,
xiang2580 发表于 2014-1-7 10:56 | 显示全部楼层
再顶顶!
songxu125400 发表于 2014-1-10 14:37 | 显示全部楼层
写得很好,有同感
tianjiahe 发表于 2014-2-5 14:08 | 显示全部楼层
我又跳到一个公司,遇到与楼主一模一样的问提,可以说是全部对应上中大奖了,我看到全程变量的滥用,并引发很多个棘手的问题,大量的问题亟待处理,我尝试增新功能,又必须定义全程变量。前任已经干了10年去年走的,之前他工资1万多是公司绝对离不开的人物。我基本确定他新的功能搞不定了。烂摊子到我这里,只有3万行烂代码,我之前没搞过ARM,只搞过51单片机,看了写ARM资料,用近一个月时间,基本搞清楚这个软件做了什么功能,源代码没有价值了,肯定要重写,因为现在硬件不允许改,我花了2个月时间,在年前移植了一个ucOS内核,写完了底层驱动,让整个机器外设都跑起来,今年准备全力写应用。我相信我能比前人做的更好,有了OS,我相信程序结构和流程应该会好些,但具体会有哪些变化,它的流程是怎么控制的,我心里没底,在这方面也没多少经验,真心期望高手给个指点,先谢谢了。
5IGer 发表于 2014-2-17 21:40 来自手机 | 显示全部楼层
受教了!!!!
ff8zgs 发表于 2014-2-20 11:33 | 显示全部楼层
如果 一个程序到处都是全局变量 那么只能说这个工程师还没有程序结构和分层的概念,这种程序到最后只能死掉,我手上就有前人留下的这种代码,到处都是全局变量。到现在我只要修改一点点,就会出现内存分配不了,或者一些奇奇怪怪的问题。增加一个小小的功能,结果调试代码要花费几天时间。现在正在准备重写代码。
 楼主| sedatefire 发表于 2014-3-1 13:10 | 显示全部楼层
唉,时隔一年,看到自己以前写的**。
好有灵性,好有冲劲...
怎么感觉就老了很多的样子,时间都去哪儿啦。
 楼主| sedatefire 发表于 2014-3-1 13:14 | 显示全部楼层
杨工 发表于 2012-1-10 12:03
同意楼主,但是全局变量只不过是最表面的祸首。
还需要学习C++的思想,能把C++的思想应用到C编程里,才是较 ...

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

但,对于嵌入式来说,面向对象C写法有一个小瑕疵。
空间效率不高,有些没有用的的接口,一样链接到code区里。
john_lee 发表于 2014-3-1 17:09 | 显示全部楼层
让函数指针指向某函数,当然会把这个函数链接进来,对C来说,由于语言本身的表达力不足,所以需要编程者细腻地操作和定义(一些非常底层)的代码和数据,才能比较好地控制效率和开销,但这种操作对于软件分层的设计来说,很多都会跨越修改各个层次,违反了“开闭原则”,是分层设计的大忌。
zzzzzx 发表于 2014-3-4 22:34 | 显示全部楼层
这么多的人都不赞成过多使用全局变量。但是我有一个问题。当采用多文件模块编程,比如,一个项目分别划分为键盘处理模块,显示模块,FLASH存取模块,D/A输出模块等。当操作按键后,在键盘处理模块中改变了一些参数(变量);当进入显示模块后,取出这个变量去显示;当进入FLASH存取模块后,存储这个变量;当进入D/A输出模块后,输出对应的模拟量。请问,如果不用全局变量的话,用什么呢?
jeff_yunyi 发表于 2014-3-5 10:59 | 显示全部楼层
写得不错,经验之谈
szyijitong 发表于 2014-3-14 21:53 | 显示全部楼层
呵呵。。。
萧十一郎hot 发表于 2014-11-4 15:04 | 显示全部楼层
感觉好迷茫。
wyq165 发表于 2014-11-4 15:52 | 显示全部楼层
我也感觉好迷茫。
内心里也很赞同楼主的观点。
可是在实际过程中,很多地方感觉,如果用局部,可能又要多加很多不必要的流程。
曾有偏移说他们公司,基本上都不会用全局变量.模块与模块间的IO全部用 接口(也就是函数实现。)
后来我曾试验过。发现一下子多了很多接口函数,或者宏。
看来自己还是没学到家啊。
578896817fyt 发表于 2014-11-6 17:41 | 显示全部楼层
前辈,因为之前只听过堆栈溢出,而没听过栈溢出,请问假如我定义了9个局部变量,单片机只有八层堆栈,这样会不会导致栈溢出呢?帖子那么久了不知道前辈是否看得到我的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部