宏和函数的区别

宏通常被应用于执行简单的运算,比如在两个数中找出较大的一个。

#define MAX(a,b) ( ( a ) > ( b ) ? ( a ) : ( b ) )

那为什么不用函数来完成这个任务?
原因有二:
1.用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。
2.更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达式上使用。反之这个宏可以适用于整型,长整型,浮点型等可以用于>来比较的类型。宏是与类型无关的
和函数相比宏也有劣势:
1.每次使用宏的时候,一份宏定义的代码将插入到程序中。除非宏比较短,否则可能大幅度增加程序的长度。
2.宏是没法调试的。
3.宏由于与类型无关,也就不够严谨。
4.宏可能会带来运算符优先级的问题,导致程序容易出错。
宏有时候可以做到函数做不到的事情。比如:宏的参数可以出现类型,但是函数做不到。
命名约定:宏名需要全部大写, 函数名不要全部大写

宏和函数的一个对比

宏和函数的区别