我刚刚编写了这段代码并获得了我不理解的输出。
#include <stdio.h>
#define SQUERE(X) ((X)*(X))
int main(void) {
int s=5,i;
i=SQUERE(s); // option 1
i=SQUERE(s++); // option 2
i=SQUERE(++s); // option 3
printf("%d %d",i,s);
return 0;
}
宏中的第一个选项返回&#34; 25 5&#34; - 我完全理解。
第二个选项返回&#34; 30 7&#34;我不明白 - 为什么s
7而不是6?为什么30而不是25?(先s*s
然后s++
)
第三个选项返回&#34; 49 7&#34; - 而且我也没有。 我很乐意在输出之前解释程序的步骤。
答案 0 :(得分:4)
预处理器只是文本操作,您的代码扩展为:
i = (s) * (s);
或
i = (s++) * (s++);
或
i = (++s) * (++s);
最后两个都是未定义的行为。