宏中的优先级(++ x vs x ++中的宏)

时间:2015-02-01 19:39:09

标签: c macros operator-precedence

我刚刚编写了这段代码并获得了我不理解的输出。

#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; - 而且我也没有。 我很乐意在输出之前解释程序的步骤。

1 个答案:

答案 0 :(得分:4)

预处理器只是文本操作,您的代码扩展为:

i = (s) * (s);

i = (s++) * (s++);

i = (++s) * (++s);

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