宏定义功能

时间:2012-06-16 09:14:32

标签: c

#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;

}

mult(next(3),prev(4))扩展为mult(3+1, 4-1),即12.但答案是6.

为什么?

1 个答案:

答案 0 :(得分:10)

...而mult(3+1, 4-1)扩展为

3+1 * 4-1

导致3 + 4 - 1或6。

在宏定义这样的函数中,在每个参数和整个定义周围加上括号

#define next(x) ((x) + 1)
#define prev(x) ((x) - 1)
#define mult(x, y) ((x) * (y))