这里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);
}
答案 0 :(得分:4)
宏调用
f(3 + 3)
替换为
3 + 3 * 3 + 3
这就是宏的参数通常放在括号之间的原因:
#define f(a) (a) * (a)
作为旁注,如果使用变量而不是文字整数,并执行类似
的操作int a = 3;
int result = f(a++);
然后将宏替换为
(a++) * (a++)
导致a
递增两次。 和处于未知顺序,导致未定义的行为。
在C ++中,很少有类似函数的宏的使用,并且它们存在所有问题(如上所示),你真的不应该使用它们。使用函数,它们行为正确,编译器仍然可以内联它们,并且它们是类型安全的(想想如果你做了f("3")
会发生什么,你可能会得到难以追踪的奇怪错误。)< / p>
答案 1 :(得分:0)
因为3 + 3×3 + 3 = 15。
尝试使用括号来达到你想要的效果。