首页 > 试题广场 >

程序最后输出什么?( )

[单选题]
程序最后输出什么?(    )
#define Mul(x,y) ++x*++y
 
void main()
{
    int a = 1;
    int b = 2;
    int c = 3;
 
    printf(“%d”,Mul(a+b,b+c));
}
  • 14
  • 24
  • 48
  • 18
Mul(a+b,b+c)经过宏替换变成++a+b*++b+c,需要注意宏替换的原则,是不会凭空加括号的。另外++优先级大于*,因此会先++a 和++b,然后a=2,b=3进行a+b*b+c=2+3*3+3=14
发表于 2018-09-11 11:06:32 回复(2)
Mul(a+b,b+c)经过宏替换变成++a+b*(++b)+c,即2+3*3+3
发表于 2017-08-11 20:04:04 回复(14)
优先级()>  ++ > * > +
发表于 2017-08-18 12:03:56 回复(0)
请问宏替换之后 ++a+b*(++b)+c 为什么不是 2+2*3+3...
是先计算了++b吗?
发表于 2017-08-27 10:49:53 回复(7)
本题考查:
(1)宏替换的概念,注意:宏替换只简单替换变量就可以了,不用管其他。
(2)优先级()>++>*>+
编辑于 2019-08-04 11:03:16 回复(0)
若d = Mul(a + b, b + c)
则d 
= ++x*++y
= ++a + b* ++b + c
= (++a) + b * (++b) + c
= 2+3*3+3
= 14
发表于 2018-04-05 00:38:19 回复(1)
宏替换的原则!!!
发表于 2020-08-10 18:11:22 回复(0)
Mul(a+b,b+c)经过宏替换变成++a+b*++b+c,需要注意宏替换的原则,是不会凭空加括号的。另外++优先级大于*,因此会先++a 和++b,然后a=2,b=3进行a+b*b+c=2+3*3+3=14
发表于 2021-10-18 19:35:03 回复(0)
先运算 ++a ++b 所以b也是++b后的值
发表于 2018-07-23 13:55:31 回复(0)
优先级()>++>*>+
替换后是++a+b*(++b)+c;
先计算++b 所以2+3*3+3=14
发表于 2018-06-15 14:11:17 回复(0)
++b在编译的时候对变量b所在的内存做了+1的操作
b*++b根据优先级得到的语法树
    *
b     ++
            b
先计算高优先级的得到b=3
然后计算*,就是3*3 = 9.
++b和b++的区别在于一个直接利用内存值进行计算,b++先复制一个值用于计算,再对内存的值进行修改。
然而我只是写编译器的时候这样实现的。真是情况不懂

发表于 2017-09-01 22:03:44 回复(1)
Mul是定义的宏函数,a+b和b+c直接替换x和y即可。得到++a+b*++b+c,按照运算符的优先级,a和b执行递增操作。然后是b*b,最后进行加法运算。
发表于 2021-08-03 19:12:11 回复(0)
正确答案应该是11吧 2+2*3+3
发表于 2019-11-01 09:31:18 回复(0)

就文本替换 参数是什么就传什么 不要自己加括号

发表于 2019-10-20 14:30:59 回复(0)
vs2022 测试自增的结果
所有优先级低于自己的运算符,在++()自增运算后才能取值。()++则是在整个表达式运算取值完成后,再进行自增。
发表于 2024-07-29 12:34:59 回复(0)
我觉得他是这个意思,因为是++x * ++y,mul(a+b,b+c),x==a+b,y==b+c即 ++a+ b * ++b+ c,因为++的优先级最高所以就2+3*3+3   注:++是从右开始算的,宏定义只管第一个
发表于 2023-07-25 10:38:07 回复(0)
总是弄不明白 b++和++b
若 b = 1,
b++:此时 b = 1 ,b++ = 2。b只为1,并不能将b++的值赋值给b
++b :此时 ++b = 2 , b= 2.
请问这样理解对吗?
发表于 2023-05-24 11:23:50 回复(0)
宏定义之后变成了 ++a+b*++b+c
++的运算顺序大于*  b的值变成3 前面的b也随之变化
发表于 2023-02-15 17:42:47 回复(0)
注意两点: 1.宏替换,是不会自己加括号的; 2.++优先级大于*; 计算: Mul(a+b,b+c),宏替换后++a+b*++b+c; 先计算++,a=2,b=3; 2+3*3+3=14
发表于 2022-06-06 11:36:49 回复(0)
宏定义一定要展开写
发表于 2022-05-18 08:06:29 回复(0)