有#define MUL(x,y) x*y, 则printf("s=%d",MUL(2,2+3)):的结果.求大神尽量解答详细些,谢谢.
答案:1 悬赏:20 手机版
解决时间 2021-03-20 19:35
- 提问者网友:人傍凄凉立暮秋
- 2021-03-20 02:02
有#define MUL(x,y) x*y, 则printf("s=%d",MUL(2,2+3)):的结果.求大神尽量解答详细些,谢谢.
最佳答案
- 五星知识达人网友:时间的尘埃
- 2021-03-20 03:23
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);
}
为了避免这种情况,有两种办法解决
定义更安全的宏定义,即使用括号将表达式括起来,避免了优先级在替换后变化。
define MUL(x,y) (x)*(y)
将宏定义改变为函数
int MUL(int x,int y){
return(x*y);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯