2个回答
展开全部
#define表示宏定义,
#define M N 的意思就是用N去替换代码里出现的M
#define M(X) EXP(x) 的意思就是用表达式EXP(x)去替换代码里出现的M(x)
宏定义的特点是在编译前完成所有宏的替换。
prt(a+2); 等价于:(用到第三个#define)
printf(out(a+2));等价于:(用到第二个#define)
printf("%d",(int)item(a+2));等价于:(用到第一个#define)
printf("%d",(int)a+2*10);
所以输出结果就是 a+2*10 = 2 + 2*10 = 2 + 20 = 22
--------------------------解释--------------------------------------
尤其注意宏只是替换,所以是否加括号会影响最终的结果,如果第一个#define写成:
#define item(a) (a)*10
那么 printf("%d",(int)item(a+2)); 会变为
printf("%d",(int)(a+2)*10);
这样的话输出结果是 (a+2)*10 = (2+2)*10 = 4*10 = 40
----------------------------------------------------------------------
注意:由于题中第一个#define的a没有加括号所以应该是22而不是40。
#define M N 的意思就是用N去替换代码里出现的M
#define M(X) EXP(x) 的意思就是用表达式EXP(x)去替换代码里出现的M(x)
宏定义的特点是在编译前完成所有宏的替换。
prt(a+2); 等价于:(用到第三个#define)
printf(out(a+2));等价于:(用到第二个#define)
printf("%d",(int)item(a+2));等价于:(用到第一个#define)
printf("%d",(int)a+2*10);
所以输出结果就是 a+2*10 = 2 + 2*10 = 2 + 20 = 22
--------------------------解释--------------------------------------
尤其注意宏只是替换,所以是否加括号会影响最终的结果,如果第一个#define写成:
#define item(a) (a)*10
那么 printf("%d",(int)item(a+2)); 会变为
printf("%d",(int)(a+2)*10);
这样的话输出结果是 (a+2)*10 = (2+2)*10 = 4*10 = 40
----------------------------------------------------------------------
注意:由于题中第一个#define的a没有加括号所以应该是22而不是40。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询