C 宏定义函数 #包括 #定义下一个(x)x+1 #定义上一个(x)x-1 #定义多(x,y)x*y 内部主(空){ INTA=3,b=4; printf(“%d\n”,mult(next(a),prev(b)); 返回0; }
C 宏定义函数 #包括 #定义下一个(x)x+1 #定义上一个(x)x-1 #定义多(x,y)x*y 内部主(空){ INTA=3,b=4; printf(“%d\n”,mult(next(a),prev(b)); 返回0; },c,C,mult(next(3),prev(4))扩展为mult(3+1,4-1),即12。但答案是6 为什么会这样?。。。并且mult(3+1,4-1)扩展到 #include <stdio.h> #define next(x) x + 1 #define prev(x) x - 1 #define mult(x,y) x * y int main(void) { int a = 3, b = 4; printf("%d\n", mult(next(a), prev(b))); re
mult(next(3),prev(4))
扩展为mult(3+1,4-1)
,即12。但答案是6
为什么会这样?。。。并且mult(3+1,4-1)
扩展到
#include <stdio.h>
#define next(x) x + 1
#define prev(x) x - 1
#define mult(x,y) x * y
int main(void) {
int a = 3, b = 4;
printf("%d\n", mult(next(a), prev(b)));
return 0;
}
结果是3+4-1或6
在类似宏定义的函数中,在每个参数和整个定义周围都加上括号
3+1 * 4-1
尝试将
#define next(x)x+1更改为#define next(x)(x+1),并对prev()执行相同的操作。
您可能希望遵循在所有大写字母中命名宏标识符的标准做法,以便在代码中明确它的特殊性。
#define next(x) ((x) + 1)
#define prev(x) ((x) - 1)
#define mult(x, y) ((x) * (y))