发布网友 发布时间:2024-10-01 19:11
共1个回答
热心网友 时间:9分钟前
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);
}