c++

在使用c++的宏时发生的灵异事件

define,还我“青春”!

Posted by ethan-zhou on March 21, 2019

在一道\(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
本文为作者原创,转载请注明出处:本文链接