我的一位朋友向我展示了这个程序并问我为什么i变量增加两次.
根据我的理解MAX(i++, ++j);,这一行i首先作为参数发送然后递增,所以如果初始值i是10则应该是递增的值11,但它显示增加的值ias 12.
计划:
#include<stdio.h>
#define MAX(x,y) (x)>(y)?(x):(y)
void main(void)
{
int i = 10;
int j = 5;
int k = 0;
k = MAX(i++, ++j);
printf("%d %d %d",i,j,k);
}
Run Code Online (Sandbox Code Playgroud)
输出:
12 6 11
有人可以解释一下我的价值如何增加到12?
谢谢.
MAX是一个宏,而不是一个函数.在您的用例中,它扩展为:
k = (i++) > (++j) ? (i++) : (++j);
Run Code Online (Sandbox Code Playgroud)
您的宏定义包含两次参数
#define MAX(x,y) (x)>(y)?(x):(y)
Run Code Online (Sandbox Code Playgroud)
这使得
k = MAX(i++, ++j);
Run Code Online (Sandbox Code Playgroud)
扩展到
k = (i++)>(++j)?(i++):(j++);
Run Code Online (Sandbox Code Playgroud)
因此,增加两倍.