【发布时间】:2015-09-12 19:25:07
【问题描述】:
这里 f(3+3) 替换为 f(6)= 6*6 ? 所以输出应该是36 na?那么为什么和如何答案是 15?
#include <iostream>
#define f(a) a*a
using namespace std;
int main(){
cout<<f(3+3);
}
【问题讨论】:
-
运算符优先级和缺少括号。预处理器只是进行简单的文本替换。考虑一下结果。
-
不要在 C++ 中使用宏 - 问题已解决。
int f(int a) { return a*a; }而不是您的宏将正常工作。 -
@AlanStokes 这仅适用于 C,至少在这种情况下是这样。
-
@πάνταῥεῖ 同意。我差点把
inline放在那里,但它是一个如此简单的例子,它不需要。 -
这是为什么宏是邪恶的一个例子。我强烈建议你改用内联函数。
标签: c++ c-preprocessor