1、带参数宏定义时只能说独立参数,不能加运算符。
2、可以说宏替换优先级是最高的,防止替换后表达式有变化。
3、无论如何,#define mal(x, y) (x * y)
要写成#define mal(x, y) ((x) * (y))
,这样才会得到我们期望中的结果。
#include <stdio.h>
#define mal(x, y) (x * y) //带参数宏,参数替换表达式参数
int main()
{
int i = 3,j = 3;
int a;
char **b[5][6]; //指针数组
a = mal(i++, sizeof(b) + 5);//sizeof(b)==sizeof(char *)*5*6
printf("%d\n", a);
a = j++*sizeof(b) + 5; //after macro,not a = j++*(sizeof(b) + 5);
printf("%d\n", a);
a = i++*4;
printf("%d\n", a);
a = i++*sizeof(3);
printf("%d\n", a);
return 0;
}
output
365
365
16
20