【发布时间】:2021-09-15 03:58:55
【问题描述】:
愚蠢的问题。刚开始使用 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;
}
输出如下:
240 248 -8 -488
240 248 -8 -488
尝试了有符号和无符号,但宏结果始终相同。
【问题讨论】:
-
欢迎来到 Stack Overflow。您已经发现了不使用宏的最大原因之一。你知道
240 - 248是什么;当你把'-'放在它前面会发生什么? -
确实,这不应该是一个宏开头。为什么不让它成为一个正常的功能呢?
-
@spectras 或只是
std::abs -
宏是邪恶的。是什么阻止了某人使用
ABS('&')或 ABS(std::vector)?更喜欢使用库函数或内联函数。