C语言宏定义问题

例:#include<stdio.h>#defineMIN(x,y)(x)<(y)?(x):(y)main(){inti,j,k;i=10;j=15;k=10*MIN(i... 例:
#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
main()
{
int i,j,k;
i=10;j=15;k=10*MIN(i,j);printf("%d\n",k);
}
为什么输出的答案是15?不是100么?求详细解答!3Q!
展开
 我来答
星星坠落风在吹动
2012-02-29 · TA获得超过174个赞
知道小有建树答主
回答量:119
采纳率:0%
帮助的人:97.5万
展开全部
宏定义的不能随便自行加括号上去。
通常会误解为:10*MIN,也就是10*( (x)<(y)?(x):(y) ),所以楼主才会想成10*10=100;
正解为: 10*(x)<(y)?(x):(y) ,所以10是先与x相剩的,因此就变成了100和15比较大小,输出小的那个15。
百度网友28b4182
2012-02-29 · TA获得超过7224个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:2251万
展开全部
#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
main()
{
int i,j,k;
i=10;j=15;k=10*MIN(i,j);printf("%d\n",k);
}
宏替换是先把字符替换掉,再进行运算的
k=10*MIN(i,j)=10*(i)<(j)?(i):(j)=10*10<15?10:15
100<15不成立,所以选择了后面的
输出15
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mouse_yang
2012-02-29
知道答主
回答量:20
采纳率:100%
帮助的人:2.1万
展开全部
宏的使用主要是为了使得程序看起来简洁,修改起来方便。在编译的时候宏定义体将会在引用它的地方展开,展开后源程序出就是:k=10*(i)<(j)?(i):(j)。所以先计算10*i,最后得到15应该就不难理解了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bfmssloveycc
2012-02-29 · TA获得超过780个赞
知道小有建树答主
回答量:1015
采纳率:0%
帮助的人:529万
展开全部
#define MIN(x,y) ((x)<(y)?(x):(y)) 再试试
追问
原题是没加括号的,但是按照原题输出是15?
追答
是的,如果不加就是15,只是考你宏定义的理解程度的
k = 10 * (10) < 15 ? 10:15;
*号优先于 ? :,所以,先算10*10,为100,100大于15,所以,结果是15
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式