注册 登录
编程论坛 C++教室

#define 问题

one_june 发布于 2010-04-05 14:58, 510 次点击
#include<stdio.h>
#define MA(x)   x*(x-1)
int main()
{
    int a=1,b=2;
    printf("%d\n",MA(1+a+b));
}

MA(x) 中的 x 是相当与函数中的形参吗?  为什么输出 8 呢?  
麻烦各位给解释下!!!

7 回复
#2
zhuyunshen2010-04-05 15:01
不是的 这个是按原操作
#3
ltyjyufo2010-04-05 15:01
  宏只是进行简单的替代作用,MA(1+a+b)替换过后就是1+a+b*(1+a+b-1)
   把a=1,b=2带进去就得结果了

[ 本帖最后由 ltyjyufo 于 2010-4-5 15:04 编辑 ]
#4
one_june2010-04-05 15:03
回复 3楼 ltyjyufo
是啊 我也是这么理解的...
但是书上的答案是8, 编译器运行结果也是8!!!
怎么回事?
#5
ltyjyufo2010-04-05 15:07
还不知道怎么回事啊,1+1+2*(1+1+2-1)是多少啊
#6
蔺家少爷2010-04-05 16:36
回复 3楼 ltyjyufo
但是结果还是不对啊   
#7
蔺家少爷2010-04-05 16:37
回复 5楼 ltyjyufo
有道理,谢谢
#8
llooppzhang2010-04-05 19:09
那个宏就替换成
   1+1+2*(1+1+2-1)=8;
可以写成(x)*((x)—1);
就不会一起起义了
1