宏定义问题
#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);
}
为什么答案为 12
fudge(5)= 2.84+5 =7.84 然后*2 =15.56 取整应该为15 为什么计算机给出的答案是12 ?
搜索更多相关的解决方案:
定义
----------------解决方案--------------------------------------------------------
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);
}
估计就可以了。
----------------解决方案--------------------------------------------------------
预处理时的宏只是简单替换,和函数还是有一定区别的。
----------------解决方案--------------------------------------------------------
fudge(5)*x展开2.84+5*x
----------------解决方案--------------------------------------------------------