2
#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))は12に拡張されmult(3+1, 4-1)ます。しかし、答えは6です。

何故ですか?

4

1 に答える 1

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))
于 2012-06-16T09:16:01.313 に答える