#include <stdio.h>
#define test(x) x*x
#define test2(x) x
int main(void) {
int x=5;
printf("%d %d %d %d %d %d",test2(x), test2(x-2), test(x), test(x-2),4*(test(x-3)),4*test(x-3));
return 0;
}
这将输出为:
5 3 25 -7 -52 2
可以理解前3个但是为什么-7时测试(x-2)和最后2个...
答案 0 :(得分:1)
你的这个表达式将扩展第二个代码片段给出的内容:下面的代码缩进只是为了方便地显示代码,我知道它在语法上是错误的。 :)
printf("%d %d %d %d %d %d",test2(x),
test2(x-2),
test(x),
test(x-2),
4*(test(x-3)),
4*test(x-3));
扩张后:
printf("%d %d %d %d %d %d",x,
x-2,
x*x,
x-2*x-2,
4*(x-3*x-3),
4*x-3*x-3);
宏不会在启用括号的情况下替换表达式,而是替换文字。
如果你做数学,你会得到你已经在顶部显示的答案。