愚蠢的问题。刚开始使用 C++ 宏,但不明白这里有什么问题。
#include <iostream>
using namespace std;
#define ABS(a) ((a < 0) ? (-a) : (a))
int main() {
uint16_t a = 0xf0, b = 0xf8;
cout << a << " " << b << " " << a - b <<" " << ABS(a - b) << endl;
int c = a, d = b;
cout << c << " " << d << " " << c - d << " " << ABS(c - d) << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
240 248 -8 -488
240 248 -8 -488
Run Code Online (Sandbox Code Playgroud)
尝试使用有符号和无符号,但宏结果始终相同。
让我们来看看这个宏:
#define ABS(a) ((a < 0) ? (-a) : (a))
Run Code Online (Sandbox Code Playgroud)
让我们扩展这个宏的用法:
ABS(a - b)
Run Code Online (Sandbox Code Playgroud)
如果您继续逐字替换(因为这就是宏的工作方式)a-b在宏中随处可见a,这就是您得到的:
((a-b < 0) ? (-a-b) : (a-b))
Run Code Online (Sandbox Code Playgroud)
您几乎可以使用文本编辑器的搜索/替换功能来执行此操作。这个错误现在非常明显。
你的宏应该是:
#define ABS(a) (((a) < 0) ? -(a) : (a))
Run Code Online (Sandbox Code Playgroud)
(我添加了一组额外的括号,只是为了避免以后遇到更多麻烦)。