宏中的优先级(++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);

最后两个都是未定义的行为。