急!c语言遇到一有关带参宏定义问题

#include<stdio.h>#definef(x)x*xvoidmain(){inti;i=f(3+3)/f(2+2);printf("%d\n",i);}为什么输... #include <stdio.h>
#define f(x) x*x
void main()
{
int i;
i=f(3+3)/f(2+2);
printf("%d\n",i);
}
为什么输出结果是19?
求过程,在线等,谢谢
展开
 我来答
lcshui
2012-01-08
知道答主
回答量:17
采纳率:0%
帮助的人:21.3万
展开全部
#define 宏定义 只是简单的替换 ,如果 #define f(x) x*x, 编译的时候 , f(3+3) = 3+3*3+3
所以应该这样宏定义 #define f(x) (x)*(x) ,这样就好了,不会产生歧义。
这也是C语言宏定义的缺陷,容易产生二义性,所以c++提出了其替代功能,也就是内联函数。
靓丽还清湛的标兵5177
2012-01-08 · TA获得超过1649个赞
知道小有建树答主
回答量:1032
采纳率:100%
帮助的人:988万
展开全部
#define f(x) ((x)*(x)) //多带几个括号就没事了

少了括号,它一展开就不是你想要的啦
f(3+3)/f(2+2) 没括号时展开是 3+3*3+3/2+2*2+2 结果就是19了
明白么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dwjchdu
2012-01-08 · TA获得超过5914个赞
知道大有可为答主
回答量:4576
采纳率:60%
帮助的人:1111万
展开全部
i=f(3+3)/f(2+2);
这一句带入宏后定义后变成:
i=3+3*3+3/2+2*2+2;
这样是不是很清楚呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汇成明
2012-01-08 · 超过20用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:41.7万
展开全部
宏定义与展开的问题。 一楼正解。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式