在一道\(luogu\)题目里,我定义了一个取绝对值的宏:
#define abs(x) (x>0?x:-x)
而调用这个宏的代码大概是这样滴:
if(abs(arr[i]-ans[x-1])<=k)continue;
结果出现了某些神奇的现象,比如说:AC
cout<<abs(-3-1);
显示的的结果竟然是——\(2\)
什么?!!(我的鼠标于是被砸坏了)
其实,正确的宏应该写成这样:
#define abs(x) ((x)>0?(x):-(x))
因为c++的宏只是粗暴地将文字替换掉(我的理解),与函数不同,他不会先计算变量“x”的值。所以才导致了以上的问题。
作者:@ethan-enhe
本文为作者原创,转载请注明出处:本文链接