首页 > 试题广场 >

以下程序的输出结果是: #define M(x,y,z) x

[单选题]
以下程序的输出结果是:
#include <stdio.h>
#define M(x, y, z) x *y + z
main() {
    int a = 1, b = 2, c = 3;
    printf("%d\n", M(a + b, b + c, c + a));
}

  • 19
  • 17
  • 15
  • 12
推荐
分析:#define的边际效应,直接展开,变成a+b*b+c+c+a,详见找工作笔试面试那些事儿(1)---C,C++基础和编程风格(2)
编辑于 2015-02-10 18:24:45 回复(8)

宏定义没加括号,展开是没有括号的

发表于 2016-03-14 19:05:40 回复(0)
宏定义就是按原样替换,没括号就是没括号,不计算任何值
发表于 2018-06-22 08:09:08 回复(0)
1+2×2+3+3+1
发表于 2015-07-16 19:05:28 回复(0)
注意,define宏定义时没有加括号,在代入表达式时也不能加括号,这也启示我们有宏定义表达式时,一定要加括号,否则有可能出错。
发表于 2016-05-18 17:17:12 回复(0)
在宏定义中 M(x,y,z) x*y+z xyz的计算并没有加括号,因此在展开M(a+b,b+c,c+a) 按上面规则计算,也无需加括号,所以计算结果是a+b*b+c+c+a带入abc的值等于12
发表于 2021-08-04 21:44:44 回复(0)
M(a+b,b+c,a+c)->a+b*b+c+a+c->1+2*2+3+1+3=12
发表于 2022-06-09 20:18:01 回复(0)
#define的边际效应,直接带入,如果自己用的话要加括号,防止出错
发表于 2022-05-18 16:03:00 回复(0)
#define 宏是在代码中不加任何验证的直接替代,当宏中包含运算符时要在最外层加括号,不然可能会出错
发表于 2022-04-07 14:25:55 回复(0)
1+2*2+3+3+1
发表于 2021-03-16 08:37:21 回复(0)
宏定义要记得加括号,(逃
发表于 2018-01-18 03:13:47 回复(0)
宏定义没加括号,展开是没有括号的
发表于 2017-06-25 14:59:58 回复(0)
展开没有括号
发表于 2017-03-25 22:28:56 回复(0)
直接带入
发表于 2016-10-20 20:30:33 回复(0)