当前位置: 代码迷 >> C语言 >> 宏定义问题
  详细解决方案

宏定义问题

热度:263   发布时间:2007-09-11 20:23:37.0
宏定义问题
#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
----------------解决方案--------------------------------------------------------
  相关解决方案