看如下代码,思考一下,它的输出结果是什么
#include <stdio.h>
#define A(w, x, y, z) (w = x, x = y, y = z, z = w)
int main() {
int a = 1, b = 2, c = 3, d = 4;
printf("%d", A(a, b, c, d));
return 0;
}
程序的输出结果为:2
解释:
当执行 printf("%d", A(a, b, c, d));
时,A(a, b, c, d)
会被替换为 (a = b, b = c, c = d, d = a)
。
逐步分析,这段代码会按顺序执行以下操作:
a = b
:将b
的值赋给a
,所以a
变为2
。b = c
:将c
的值赋给b
,所以b
变为3
。c = d
:将d
的值赋给c
,所以c
变为4
。d = a
:将a
的值(此时为2
)赋给d
,所以d
变为2
。
由于宏 A(w, x, y, z)
使用了逗号表达式,最终返回的是最后一个赋值表达式的值 d = a
的结果,即 2
。
所以A(a, b, c, d)的返回结果是2,打印输出为2