打印

很反感使用宏定义!

[复制链接]
8438|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaogongzuo|  楼主 | 2010-4-6 20:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道你们有没有这样的经历,阅读别人的程序是一种痛苦!特别是程序中使用了大量的宏定义!我就搞不明白了,咋会有那么多宏定义,常量的宏定义几百个,函数宏定义几百个!靠,这程序没没法看了,一个宏中有另一个宏,另一个宏有另一个宏------在心里把写程序的人骂了N遍!我写函数还没超过20个宏过,尽管大程序。

宏定义也就是在编译预处理时,在程序中替换宏的地方嘛,只是提供一种方便而已,可是现在发现很多人写程序,有事没事就来个宏定义!而且变成一种时髦似的,好像不用宏就说明自己很低级一样!我也不是说宏定义不好,有些地方还是很方便的,比如一个常量常常被用到,而且以后调试或维护中常常要修改这个变量,那么宏定义是很好的。还有一些常常被用到的小函数,写成宏也是不错的!

一个好的程序,是越写越简单,而不是越写越复杂;是为了方便别人能看得懂,而不是只有你懂;好的程序是:越简单越好,越容易明白越好,指令越少越好!
简单、易懂、效率高的程序才是最好的!你的程序中用了大量的宏,那么肯定很难被人看懂,特别是很大很大的程序中。

想尽一切办法不去使用全局变量,这样你的程序更简单更易懂。看了人家的程序,也是几百个变量陈列在那里就没有心情了。模块化也要管理好,一般来说,一个模块里面有一两个函数被调用就行了,而不是这个模块可以调用其他模块的小函数,另一个模块也可以调用这个模块的小函数,这样写,不觉烦,乱吗?如果被调用很多次,就写成一个模块,而不是一个函数。

算了,今天郁闷,第一次发帖,发2句牢骚,给人家拍,俺不怕!

相关帖子

沙发
mentlely| | 2010-4-6 20:31 | 只看该作者
不使用宏?难道直接使用数字常量?宏如果命名得好,比数字常量更直观

使用特权

评论回复
板凳
ejack| | 2010-4-6 20:31 | 只看该作者
要是宏定义少了,你发牢骚会比现在疯狂10倍……
“MLGB的,没事写个什么31415926535897932384626,宏定义个PI不就得了……”

使用特权

评论回复
地板
NE5532| | 2010-4-6 20:40 | 只看该作者
楼主是在很讨厌宏的话,可以换个工作环境——研究反汇编,估计会觉得爽。

使用特权

评论回复
5
原野之狼| | 2010-4-6 21:15 | 只看该作者
楼主要不你把代码奉献一下 这样大家也有个对比

使用特权

评论回复
6
jerkoh| | 2010-4-6 21:34 | 只看该作者
:lol 比较喜欢使用宏定义~

使用特权

评论回复
7
highgear| | 2010-4-6 21:49 | 只看该作者
不可不用, 不可多用.
C++里鼓励用 const 代替 macro, c# 里干脆没有 macro.
我看见很多时候应该用 enum, 有人却用 macro, 这是macro 过多的一个原因。

使用特权

评论回复
8
zdhlixiang2006| | 2010-4-6 22:13 | 只看该作者
LZ看来没有写过太大太复杂的程序啊,对这没有感触啊....

使用特权

评论回复
9
john_light| | 2010-4-6 22:35 | 只看该作者
不可不用, 不可多用.
C++里鼓励用 const 代替 macro, c# 里干脆没有 macro.
我看见很多时候应该用 enum, 有人却用 macro, 这是macro 过多的一个原因。
highgear 发表于 2010-4-6 21:49

我偶尔使用enum,在某些地方的确舒服。

使用特权

评论回复
10
呆板书生| | 2010-4-7 08:01 | 只看该作者
用enum挺好

凡事都有个度,过则不好,一个小程序超过20个宏,自己看起来是有点不舒服

微软的VC也有很多宏,奇怪的是,干嘛没人去骂他?

使用特权

评论回复
11
zhaoguohai1987| | 2010-4-7 08:28 | 只看该作者
阅读程序是需要工具帮忙的,推荐source insight,宏定义,引用一目了然。
在软件升级维护的时候你就知道宏的好处了

使用特权

评论回复
12
mohanwei| | 2010-4-7 08:40 | 只看该作者
大程序和复杂程序完全是两码事……
打个比方,你在Flash里放了一个字库,再实现一个小菜单,程序是够大了,但是能算复杂么

复杂点的程序没有宏定义是难以想象的

使用特权

评论回复
13
huangqi412| | 2010-4-7 08:40 | 只看该作者
不用宏你会更惨...   宏替换不会超过3层吧,应该不会谁没事闲得动不动就替换7,8层.
另外,阅读时候不必一次挖到底吧. 可以一层层平挖.   比如一个LCD初始化,里面用了发送指令,发送数据,没必要一次钻进去再看发送指令子函数,又钻进去看发送指令子函数调用了一些IO时序的宏,IO时序宏又调用了位操作宏.

话说您老这不是阅读代码,而是一台人工型单步反汇编机.  比单步仿真还牛X,单步仿真都不会去一层层跳到宏定义处去替换.

一层层平挖方式: 先看程序结构. 再一层层的挖下去.   有时候,你读别人的代码,根本就不要挖到底,平挖两层就可以了.相当仿真时候不进入函数内部.  如果要琢磨别人某个模块,也一样,一层层的挖某个C文件好了.反复的从地表挖到地心,又反复的爬回地面,不累死才怪.

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
john_light + 1 说到点子上了
14
HWM| | 2010-4-7 09:08 | 只看该作者
本帖最后由 HWM 于 2010-4-7 09:09 编辑

“读”和“写”程序的误区:

人们读他人的程序,总喜欢把它“读通”,每句都要看懂,甚至还可能会去揣测作者当时的“心情”如何,实在太累。那些写程序的,不少也太过于自我陶醉,不知所写的东西都是给别人用的。

宏原本是程序文本的“引用”机制(现在的超文本结构其实就是宏的拓展),使用它可以大大的简化文本的输入和编辑。如果结果是适得其反,那建议别用,因为你还未领会其初衷。

使用特权

评论回复
15
icecut| | 2010-4-7 10:01 | 只看该作者
#IFDEF xxxx
MACRO_DEFINE(A,B,C)
#ELSE
MACRO_DEFINE(A,B,C,D)
#ENDIF
==================
并且没注释.头不大都不行.

使用特权

评论回复
16
ym2008| | 2010-4-7 13:39 | 只看该作者
看看!
宏定义一直有用。

使用特权

评论回复
17
zhaogongzuo|  楼主 | 2010-4-7 13:46 | 只看该作者
13# huangqi412

我也是看几层的,,,,但是宏实在太多了,,,累死

使用特权

评论回复
18
zhaogongzuo|  楼主 | 2010-4-7 13:49 | 只看该作者
14# HWM

很有道理!他们自己写的程序往往自己才看得懂

既然都是为了方便,但如果宏太多,而且乱用,往往造成不方便

使用特权

评论回复
19
zhaogongzuo|  楼主 | 2010-4-7 13:51 | 只看该作者
其实我有时候也用宏,但是我不乱用,不多用,这样人家看程序就方便,一目了然。

使用特权

评论回复
20
huangqi412| | 2010-4-7 14:16 | 只看该作者
14# HWM  

很有道理!他们自己写的程序往往自己才看得懂

既然都是为了方便,但如果宏太多,而且乱用,往往造成不方便
zhaogongzuo 发表于 2010-4-7 13:49


应该不会吧...        得有注释,  宏定义名字也得一目了然.   
还是比如LCD初始化,如果定义个写一条命令的宏,  看这一层时候,根本不要去看怎么实现的吧.  人家写个WRITE_CMD(clear)  就可以啦, 你不必一层层去解剖人家的宏,要是非常不爽,直接把人家的替换成自己的估计就稍微爽点了.    当然,如果人家写成ABCDEF(0XFF)  完全是乱码不知所云  那就悲剧了.

使用特权

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

本版积分规则

3

主题

28

帖子

1

粉丝