什么是宏代码?
宏代码是一种在计算机编程中使用的技术,它允许程序员定义一段可重复使用的代码片段。
宏代码通常使用预处理器来实现,它会在编译阶段将宏代码展开到程序中。宏代码可以接受参数,使得代码更加灵活和可定制。通过使用宏代码,程序员可以减少重复的代码,提高代码的可读性和维护性。宏代码在许多编程语言中都有广泛的应用,如C、C++和Java等。
宏到底是什么?
宏是一种在计算机编程中使用的特殊技术或语言功能。它允许程序员定义一系列代码片段,并在需要时进行重复使用。
宏可以用于简化代码、提高代码的可读性和可维护性。它可以在编译时或运行时进行展开,将宏调用替换为实际的代码。宏通常用于定义常量、函数、条件编译和代码生成等方面。在C、C++、Java等编程语言中,宏是一种强大的工具,可以帮助程序员更高效地编写代码。
计算机科学里的宏(Macro),是一种批量处理的称谓。一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串)。这种替换在预编译时进行,称作宏展开。宏,就是一些命令组织在一起,作为一个单独命令完成一个特定任务。
为什么大部分编程语言弃用了宏?
这个世界上绝大部分编程教材是针对刚入门的程序员写的,没错,很多编程二十年的程序员其实也刚入门。
以前带队时我总是提醒新招的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是一匹桀骜不驯的烈(劣)马,但是对一个好骑手来说,只需要驯服一次。