C#定义奇怪的输出

时间:2017-05-11 03:54:15

标签: c output

#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个...

1 个答案:

答案 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);

宏不会在启用括号的情况下替换表达式,而是替换文字。

如果你做数学,你会得到你已经在顶部显示的答案。