任何人都可以告诉我为什么以下代码给他以下答案
#define MAN(x,y) (x>y)?x:y
#include <stdio.h>
int main(void)
{
int x = 10;
int y = 5;
int k = 0;
k = MAN(++x, y++);
printf("%d%d%d", x, y, k);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:12 6 12怎么样?
"呼叫" MAN(++x, y++)被替换为
(++x > y++) ? ++x : y++
Run Code Online (Sandbox Code Playgroud)
二者x并y在对条件,之后,它们的值是评估过程中递增一次11和6分别.条件求值为true,因此三元表达式求值为++x.结果,x它本身再次递增,将其值增加到12.三元条件评估为12,分配给k.
因此,总体而言,x增量两次,并且y仅增加一次,并且在两个增量之后k被赋予值x.
这是预处理器宏的常见问题.