有#define MUL(x,y) x*y, 则printf("s=%d",MUL(2,2+3)):的结果.求大神尽量解答详细些,谢谢.

 我来答
笑着苦恼
推荐于2018-02-28 · TA获得超过197个赞
知道答主
回答量:44
采纳率:100%
帮助的人:14.5万
展开全部
define仅仅是字符替换,因此在将MUL(2,2+3)时,x是2,y是2+3,直接将表达式x*y替换字符后,则变成了2*2+3,其计算结果在乘法优先于加法的作用下会得到7这个数值。这里运用了PRINTF语句,所以输出的值是S=7
为了避免这种情况,有两种办法解决
定义更安全的宏定义,即使用括号将表达式括起来,避免了优先级在替换后变化。
define MUL(x,y) (x)*(y)
将宏定义改变为函数
int MUL(int x,int y){
return(x*y);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式