宏中的优先级(++x 与宏中的 x++)
priority in macro (++x vs x++ in macro)
我刚写了这段代码,得到了我不理解的输出。
#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;
}
宏中的第一个选项返回“25 5”——我完全理解。
第二个选项返回“30 7”,我不明白 - 为什么 s
是 7 而不是 6?为什么是 30 而不是 25?(首先 s*s
然后 s++
)
第三个选项返回“49 7”——我也没有得到。
我很乐意解释程序的步骤直到输出。
预处理器只是文本操作,您的代码扩展为:
i = (s) * (s);
或
i = (s++) * (s++);
或
i = (++s) * (++s);
最后两个都是未定义的行为。
我刚写了这段代码,得到了我不理解的输出。
#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;
}
宏中的第一个选项返回“25 5”——我完全理解。
第二个选项返回“30 7”,我不明白 - 为什么 s
是 7 而不是 6?为什么是 30 而不是 25?(首先 s*s
然后 s++
)
第三个选项返回“49 7”——我也没有得到。 我很乐意解释程序的步骤直到输出。
预处理器只是文本操作,您的代码扩展为:
i = (s) * (s);
或
i = (s++) * (s++);
或
i = (++s) * (++s);
最后两个都是未定义的行为。