首页 > 试题广场 >

输出以下表达式的结果

[单选题]
以下程序输出结果为:
#include<stdio.h>
#define add(a,b) a+b
int main() { 
 printf("%d\n",3 * add(4,7)); 
 return 0;
}

  • 33
  • 19
  • 25
  • 49
推荐
【正确答案】B
【解析】#define add(a,b) a+b 为带参数的宏定义,在预处理阶段,会进行宏替换。替换后,main()函数中的代码会替换成 3 * 4 + 7,所以结果为 19。

宏函数知识点讲解】
更多C++基础专业知识讲解,点击链接即可查看
编辑于 2021-11-17 15:17:44 回复(0)
B 直接宏名代入 3 * 4 + 7 = 19
发表于 2015-08-26 09:39:35 回复(0)

答案 B

C/C++ 中,宏定义只是做简单的字符替换;

#define add(a,b) a+b 中, a+b 没有括号,所以 3* add(4,7) 实际的替换情况是: 3*4+7=19 ;若 a+b 有括号, #define add(a,b) a+b )则结果为: 3* 4+7 =33

编辑于 2021-11-17 15:17:44 回复(1)
B
宏是直接替换 编译时会将add(4,7) 换成4+7
即为3*4+7
结果为19
编辑于 2015-08-26 10:48:05 回复(1)
选A  define在预编译时进行宏的替换,所以计算结果是3*a + b 即3*4 + 7 = 19.
发表于 2015-03-22 17:37:10 回复(0)
3 * add(4,7)先进行宏替换,变成3 *4+7=19,故选B。
发表于 2022-07-04 22:22:50 回复(0)
预处理阶段的宏替换 直接替换,不会计算
所以该程序中执行add(4,7)会替换成3 * 4 +7 = 19。
发表于 2022-06-21 19:54:36 回复(0)
如果题目把 #define add(a,b) a+b 换成 typedef a+b add(a,b) ; 会不会就应该选33呢
发表于 2020-12-26 22:06:43 回复(0)
<p>(a+b)没有括号!!!</p>
发表于 2020-11-27 00:22:00 回复(0)
3*4+7
发表于 2019-12-04 08:42:39 回复(0)
求你们多用点cout谢谢
发表于 2019-11-28 22:07:59 回复(0)
函数调用返回的值,要把算式先带回再根据优先级运算。
发表于 2018-10-18 10:20:35 回复(0)
简单的字符替换。
发表于 2018-03-27 09:57:34 回复(0)
宏替换
直接将add(4,7)替换成为4+7,且不加括号
替换后的公式为:3*4+7=12;
若定义:#define add(a,b) (a+b)
则替换后的公式为:3*(4+7)=33;
欺骗性很大~~~
发表于 2017-05-14 15:10:40 回复(0)
3*4+7 宏替换后,应该为19
发表于 2015-08-26 21:48:34 回复(0)
B,替换到以后是3*4+7=19
发表于 2015-08-26 17:01:20 回复(0)
3*4+7 B

发表于 2015-08-26 16:38:12 回复(0)
这个肯定是19呀,宏定义是直接替换就行了,3*a+b,也就是3*4+7=19
发表于 2015-08-26 15:36:18 回复(0)
B
发表于 2015-08-26 10:56:14 回复(0)
B
这个题要注意不能自己添加括号(因为宏是字符串的直接替换,这也是宏的一个缺陷),所以为3*4+7=19。
发表于 2015-08-26 10:39:59 回复(0)
宏的作用是字符替换,替换后的代码应该是如下
intmain() { 
 printf("%d\n",3* 4 + 7); 
 return0;
}

所有得到的结构就是答案B
发表于 2015-08-26 10:04:46 回复(0)