为什么"i"变量在我的程序中增加两倍?

Sea*_*ock 6 c macros

我的一位朋友向我展示了这个程序并问我为什么i变量增加两次.

根据我的理解MAX(i++, ++j);,这一行i首先作为参数发送然后递增,所以如果初始值i10则应该是递增的值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?

谢谢.

Oli*_*rth 8

MAX是一个宏,而不是一个函数.在您的用例中,它扩展为:

k = (i++) > (++j) ? (i++) : (++j);
Run Code Online (Sandbox Code Playgroud)


Dav*_*nan 5

你的宏替换意味着你写(i++)>(++j)?(i++):(++j).


rub*_*nvb 5

您的宏定义包含两次参数

#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)

因此,增加两倍.