1)宏的形参之间可以出现空格,但是宏名和形参之间不能出现空格 #define SUM (a)a + b //错,形参与宏名之间不能有空格
2)在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值。要用它们去代换形参,因此必须作类型说明。这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予给形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。
3)在宏定义中的形参是标识符。而宏调用中的实参可以是表达式 #define M(x, y)x * y + x + y int result2 = M(2 + 2, 3); 但是注意,这样传递是x不是2 + 2 = 4去传,而是把2 + 2换成x,即: 2 + 2 * y + 2 + 2 +y
4)有参宏的宏参数最好用括号括起来 #define M(x, y)(x * y + x + y)
|