首页 > 试题广场 >

执行下列程序: #define MA (x,y) (

[单选题]

执行下列程序:

#define MA(x, y)  (x*y)
i = 5;
i = MA(i,i+1)-7;

变量i的值应为( )

  • 30
  • 19
  • 23
  • 1
#define 宏定义只是替换,MA(i,i+1)替换成x = i,y = i + 1。执行 x * y == i * i + 1(注意此处i + 1没有括号)。所以结果是26,最终结果是19
发表于 2018-07-24 11:18:33 回复(2)
i*i+1=26
26-7=19
发表于 2018-05-15 20:48:42 回复(0)
为什么是i*i+1,而不是i*(i+1)????
发表于 2018-05-20 12:30:45 回复(1)
注意,i+1无括号,所以是i=i*i+1-7,i为5。
发表于 2022-01-15 00:23:32 回复(0)
#define MA(x,y) (x*y)
只是替换
从而  注意无括号
i = i*i+1-7
i = 19
发表于 2019-11-25 20:13:39 回复(0)
带参宏,先替换再按优先级
5*5+1-7=19
发表于 2018-12-11 21:11:45 回复(0)
MA(i,i+1)  和  MA(x, y)   形式对应,前者替换成宏定义的  (x*y)  形式 ,也就是   (i*i+1),执行运算,(5*5+1),最后表达式值  (5*5+1)-7为19

发表于 2022-08-12 08:52:51 回复(0)
i+1这里没有括号,我去
发表于 2020-11-14 14:26:51 回复(0)
宏定义只是简单替换,不会自动添加括号
发表于 2023-09-13 21:35:46 回复(0)
直接把i,i+1放到xy对应位置,不要算出来再代入
发表于 2023-01-13 19:25:52 回复(0)
宏的作用只是代码替换,而不是返回计算后的结果
MA(i,i+1)=i*i+1=26
26-7=19
发表于 2022-10-11 15:59:26 回复(0)
一不小心就掉坑里面
发表于 2022-09-23 15:29:41 回复(0)
直接替换即可
发表于 2022-03-12 10:20:55 回复(0)
宏的使用是不会涉及括号的
发表于 2021-09-27 11:19:05 回复(0)
只是替换,不带括号
发表于 2021-09-02 14:54:34 回复(0)
别看前面的,他们错了一点。就是#define是直接的字符串替换,所以()也会替换下来。
所以后面的那个表达式应该为: i=(i*i+1)-7=19
发表于 2021-08-10 09:46:33 回复(0)
带参数的宏定义,实现替换参数然后再看优先级
发表于 2021-03-25 08:28:32 回复(0)
为什么编译出来是26,没有减7呢
发表于 2021-01-28 13:15:36 回复(1)
i*i+1-19
发表于 2020-10-25 18:32:06 回复(0)