为什么大部分编程语言弃用了宏?:这个世界上绝大部分编程教材是针对刚入门的程序员写的,没错,很多编程二十年的程序员其实也刚入门。以前带队时我总是提醒新招
这个世界上绝大部分编程教材是针对刚入门的程序员写的,没错,很多编程二十年的程序员其实也刚入门。
以前带队时我总是提醒新招的C/C++程序员尽最大可能不要使用macro,我会警告他们macro有一千种可能令他们的代码出错并且查不出来,之所以有一千种是因为我不想再数下去了。然后他们打开我的代码以后就抓狂了。
如果你问一个程序员什么样的代码bug最多,会有很多回答,比如coding style,复杂度,blablabla…
都对,因为他们都是初级程序员。
但是,对于一个资深高级程序员,一个架构师,一个真正的高手来说,其实真正的杀手是代码长度。越短bug越少,不管它多复杂,越长bug越多,不管它多简单。
human error,that simple!
除了极极极少处不得不使用macro的场景,我使用macro都是为了缩短代码。
可读性?这个真的非常非常非常重要!是的,对于高手来说,“短”就意味着可读性不会太糟,逻辑复杂性并不是问题。如果你读不懂一段“短而tricky的”代码,说明你不是高手。
当然,你可以质疑哪里有那么多高手?没错,但我为什么要让那些低手看明白我的代码?让他们自以为看明白以后去糟蹋吗?
如果是一个真正的高手接手了我的代码,并把我狗血淋头的大骂一顿,没问题啊,他批评的一切我都认同,我诚恳认错,反正你已经看懂了。
但我还是会反复警告新手,尽一切可能避免macro!如果听者是个高手,他本来就不必理会我的blablabla。
以前我带的组里有一个高手,代码能力比我高多了,好多macro的技巧我还是跟他学的,但他极少用,我完全赞成他的理念。
如果说最坏的编程习惯,其实是copy paste,可惜这才是大多数程序员最常见的毛病(尽管几乎人人都清楚)。我在这一点上非常极端,一行C/P都不可以,我见过太多太多摔在这里的案例,每一行C/P(或相似体)我都会坚决去掉,能抽象成函数的,做成函数,出于性能考虑的,用inline,去相似性,能用template也行,如果上下文太多没法函数化,最后一个选择就是macro。
macro是一匹桀骜不驯的烈(劣)马,但是对一个好骑手来说,只需要驯服一次。
對宏功能的批評,請參閱C++之父的言論——沒想到吧?
现代编程语言一般都支持编译期常量,常量可以在大部分情况下代替宏,因此没有多引入宏这个特性。
C语言和C++为什么要支持宏呢?当年编译器技术还不够成熟,所以C语言代码文件需要分成头文件和源文件两大类,在编译的时候还有额外一个阶段叫做预处理阶段,宏就是在这个阶段被替换成实际的值的。
现代编程语言不再需要区分头文件和源文件,也没有预处理阶段,那么为了使用宏而多加一个编译阶段属于弃本逐末,所以现在的编程语言也就干脆不用宏了。
当然可能有朋友会说,宏这个东西可远远不止定义常量这么简单。我也承认宏也可以展开成非常复杂的东西,但是这时候宏就是一个非常危险复杂的特性了,我认为编程语言搞这种东西实在是没什么意思。与其关注于宏,不如为语言添加一些语法糖什么的更好。
宏这种东西,在C语言上一经问世、就走向让人看不懂的宏才牛逼的炫技道路,首先你必须明白:宏不是函数,不占内存,不参与编译,视图用宏代替函数的做法本身就是有危险的做法。
在面向对象的编程中,万一有人视图用宏编写一个类成员函数呢?而且要在内存中实例化,……,所以JAVA说:宏你去死吧!
很多语言和很多公司排斥宏并不是技术原因,而且是向现实的妥协!
因为现实的情况是【行业中有太多没有技能,没有责任心的程序员】!
宏是一个好工具,但它不是平庸的程序员能驾驭的。。。但是,唉,我也实在有点感到悲哀,这么多小朋友居然连宏都hold不住该怎么写程序?!
一个宏套宏,把人可以搞晕。
宏其实就是一种文本替换,纯C用它实现类似函数和模板的功能。
C++的模板也有点类似文本替换。
这两种东西可读性都不咋的。
不安全。
宏的作用就是替换,或者说助记,一般会给一些常用的方法定义成宏,使用的时候直接用语言写出来就好了。宏的实现也非常简单,文本替换而已。
但是缺点很明显,宏是不安全的,没有任何的检查,即使出现问题也不会第一时间知道,定位错误也会有困难,特别是引入复杂的宏函数以后。
现在很多高级语言变成了解释型语言,甚至使用动态数据类型,那么对于宏来说,失去了类型检查,其危险性就更高了。
工具就是工具,能不能用好取决于人。
Linux内部就有大量的宏,却不会有违和感。
并没有弃用宏,但使用宏定义必须规范,保证可读性。换言之,如果程序可读性差,毛病不在宏上,而是编程的人
有的场合必须用宏,确实很牛。
如果不是必须,就不要用了,用错了代价太大。
一天中什么时候运动减肥效果好抓 小孩能不能练哑铃多大的孩子适合 小孩嘴唇起皮怎么办怎样才能预防 孩子的罗圈腿是怎么形成的三大因 孩子早恋怎么办如何有效疏导孩子 医生婆婆称自己专业孩子的事必须 儿子成人礼送什么礼物好呢给你孩 有孩子的夫妻千万不要离婚对于孩 小孩千万别让老人带的说法正确吗 自卑缺乏安全感的孩子怎么改善 怎么让孩子开口说话 这几个方法 怎么让孩子吃饭 教你如何让孩子 怎么管教不听话的孩子 家长首先 顽皮的孩子怎么管教的 这些方法 叛逆期的孩子怎么管教 引导孩子 孩子性格软弱怎么办 懦弱的性格 孩子性格偏激怎么办 孩子性格偏 孩子性格固执怎么办 家长们不妨 爱惹事的孩子怎么管教 不妨试试 养育优秀的孩子具备特征,家长要 高考数学难出新天际,可有的孩子 “做胎教”和“不做胎教”的孩子 花费十几万只考了302分 妈妈觉得 甘肃作弊考生留下来的疑团,是怎 一举夺魁!高三学生离校时,校领 高考钉子户:26次参加高考,今年 D2809次列车因泥石流脱线!此类 “女儿16岁,学校宿舍里分娩了” 扭曲邪门的内容,频频出现在教科 川渝地区几所大学实力很牛!四川