罕见的宏定义有两种,不带参数的宏定义和带参数的宏定义。
宏定义能够协助我们防备失足,进步代码的可移植性和可读性等。
在软件开发过程当中,常常有一些常常运用或许通用的功用或许代码段,这些功用既能够写成函数,也能够封装成为宏定义。那末究竟是用函数好,照样宏定义好?这就请求我们对两者举行合理的弃取。
我们来看一个例子,比较两个数或许表达式大小,起首我们把它写成宏定义:
#define MAX( a, b) ( (a) > (b) (a) : (b) ) # 其次,把它用函数来完成: int max( int a, int b) { return (a > b a : b) }
很显然,我们不会挑选用函数来完成这个使命,缘由有两个:起首,函数挪用会带来分外的开支,它须要拓荒一片栈空间,纪录返回地点,将形参压栈,从函数返回还要开释客栈。这类开支不仅会下降代码效力,而且代码量也会大大增添,而运用宏定义则在代码范围和速率方面都比函数更胜一筹;其次,函数的参数必需被声明为一种特定的范例,所以它只能在范例适宜的表达式上运用,我们假如要比较两个浮点型的大小,就不得不再写一个特地针对浮点型的比较函数。反之,上面的谁人宏定义能够用于整形、长整形、单浮点型、双浮点型以及其他任何能够用“>”操作符比较值大小的范例,也就是说,宏是与范例无关的。
和运用函数比拟,运用宏的不利的地方在于每次运用宏时,一份宏定义代码的拷贝都邑插进去到顺序中。除非宏异常短,不然运用宏会大幅度增添顺序的长度。
以上就是c言语怎样定义宏定义的细致内容,更多请关注ki4网别的相干文章!