这道题选b是为什么
#include<stdio.h>
#define abc(x,y)(x)<(y)?(x):(y)
int main(){
int a=10,b=15,c;
c=10*abc(a,b);
printf("%d\n",c);
return 0;
}
//明确abc(x,y)是宏定义,不是普通函数
//c=10*abc(a,b);相当于(10*x)<y?x:y即100<15?10:15很显然结果为15
//如果后面用括号括起来即c=10*(abc(a,b));那么就类似与普通的函数经过abc(a,b)得到10,然后和10再相乘得到100
#define abc(x,y)(x)<(y)?(x):(y)
int main(){
int a=10,b=15,c;
c=10*abc(a,b);
printf("%d\n",c);
return 0;
}
//明确abc(x,y)是宏定义,不是普通函数
//c=10*abc(a,b);相当于(10*x)<y?x:y即100<15?10:15很显然结果为15
//如果后面用括号括起来即c=10*(abc(a,b));那么就类似与普通的函数经过abc(a,b)得到10,然后和10再相乘得到100
温馨提示:答案为网友推荐,仅供参考
第1个回答 2021-01-03
宏展开后
c=10*(a)<(b)?(a):(b)
注意*的优先级比<高
所以10*(a)<(b)是(10*(a))<(b)
显然的子表达式(10*(a))<(b)为假,所以c只为b,15
c=10*(a)<(b)?(a):(b)
注意*的优先级比<高
所以10*(a)<(b)是(10*(a))<(b)
显然的子表达式(10*(a))<(b)为假,所以c只为b,15