print1(fudge(5)*x);这一句在编译时会替换成:printf ("%d", (int)(2.84 + y * x));putchar ('\n');
其中y*x是优先做运算的。你改成#include<stdio.h>#define fudge(y) (2.84+y)#define pr(a) printf("%d",(int)(a))#define print1(a) pr(a);putchar('\n')main(){ int x=2; print1(fudge(5)*x);}估计就可以了。
预处理时的宏只是简单替换,和函数还是有一定区别的。