宏替换
我们知道,宏在编译前预处理阶段,就已经完成了替换,而且替换是一个简单的替换,对宏的参数不会做任何的计算。比如定义一个求2个数中最大值的宏:
#define MAX(a,b) ((a)>(b)?(a):(b))
那么把下面的宏展开:
MAX(1+2,value)则会把它替换成:
((1+2)>(value)?(1+2):(value))
不要错误的认为:
MAX(1+2,value),会先计算1+2为3,即MAX(1+2,value)àMAX(3,value)。这是不对的。宏不像函数,不会计算1+2,而是直接用1+2去替换表达式中的a。