大家好,为什么大部分编程语言弃用了宏相信很多的网友都不是很明白,包括c中为什么不建议用宏也是一样,不过没有关系,接下来就来为大家分享关于为什么大部分编程语言弃用了宏和c中为什么不建议用宏的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
本文目录
c语言中宏定义啥意思
不能更改的定义#defineM100//宏定义M=100M=10;//错误,宏定义的数据不能被更改#defineMaxs(a,b)a>b?a:b;//Maxs函数返回两数中大的数intMaxs(inta,intb){return(a>b?a:b);}//错误,Maxs函数已被宏定义
C语言什么是宏
宏在C语言中是一种预处理指令,用于将一些固定、重复或者参数化的代码片段替换为其他代码片段或者值。
它的作用类似于函数,但是宏的优势在于它在代码生成阶段就被展开,避免了函数的调用开销,从而可以提高程序的执行效率。宏的定义使用#define关键字,后面紧跟着宏名称和宏定义,宏定义可以包含一些参数,使用实参来代替宏定义中的形参。在宏的使用中,需要注意一些潜在的问题,比如宏展开的优先级可能与代码的预期不一致,还可能有隐式副作用,使代码产生无法预期的行为。
因此在使用宏时需要谨慎,特别是在处理复杂的代码时更应该注意避免误用宏导致代码的难以维护或者出错。
C语言中常量定义和宏定义有什么区别
区别大了个去了.宏定义是预处理命令.#defienA3执行后,预处理器把会正文所有全字匹配的A,全部替换为3,那么,最后的代码进入编译器的代码,1+A,是变成1+3的.而constinta=3;这个是不在预处理器的管理范围之内,这个就是编译器的工作了,有些编译器不会为它分配空间,直接把它加入符号表中,也就是说,常量不再是0123456789这10个数,而是0123456789a这11个数,那么a就是被定义成3了,所以符号表里的内容是01234567893.而有些编译器会为它分配空间.你不知道它们的区别,说明你学宏的时候,并不知道宏的原理.
为什么大部分编程语言弃用了宏
这个世界上绝大部分编程教材是针对刚入门的程序员写的,没错,很多编程二十年的程序员其实也刚入门。
以前带队时我总是提醒新招的C/C++程序员尽最大可能不要使用macro,我会警告他们macro有一千种可能令他们的代码出错并且查不出来,之所以有一千种是因为我不想再数下去了。然后他们打开我的代码以后就抓狂了。
如果你问一个程序员什么样的代码bug最多,会有很多回答,比如codingstyle,复杂度,blablabla…
都对,因为他们都是初级程序员。
但是,对于一个资深高级程序员,一个架构师,一个真正的高手来说,其实真正的杀手是代码长度。越短bug越少,不管它多复杂,越长bug越多,不管它多简单。
humanerror,thatsimple!
除了极极极少处不得不使用macro的场景,我使用macro都是为了缩短代码。
可读性?这个真的非常非常非常重要!是的,对于高手来说,“短”就意味着可读性不会太糟,逻辑复杂性并不是问题。如果你读不懂一段“短而tricky的”代码,说明你不是高手。
当然,你可以质疑哪里有那么多高手?没错,但我为什么要让那些低手看明白我的代码?让他们自以为看明白以后去糟蹋吗?
如果是一个真正的高手接手了我的代码,并把我狗血淋头的大骂一顿,没问题啊,他批评的一切我都认同,我诚恳认错,反正你已经看懂了。
但我还是会反复警告新手,尽一切可能避免macro!如果听者是个高手,他本来就不必理会我的blablabla。
以前我带的组里有一个高手,代码能力比我高多了,好多macro的技巧我还是跟他学的,但他极少用,我完全赞成他的理念。
如果说最坏的编程习惯,其实是copypaste,可惜这才是大多数程序员最常见的毛病(尽管几乎人人都清楚)。我在这一点上非常极端,一行C/P都不可以,我见过太多太多摔在这里的案例,每一行C/P(或相似体)我都会坚决去掉,能抽象成函数的,做成函数,出于性能考虑的,用inline,去相似性,能用template也行,如果上下文太多没法函数化,最后一个选择就是macro。
macro是一匹桀骜不驯的烈(劣)马,但是对一个好骑手来说,只需要驯服一次。
为什么大部分编程语言弃用了宏和c中为什么不建议用宏的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!
声明:本文内容来自互联网不代表本站观点,转载请注明出处:https://bk.77788889.com/12/124473.html