2017-06-27 60 views
-6

执行我得到的输出为12 6 11.请解释这怎么可能请帮忙解释一下这个C程序的输出

#include<stdio.h> 
#define MAN(x,y) (x)>(y)?(x):(y) 
int main() 
{ 
    int i = 10,j = 5,k = 0; 
    k = MAN(i++,++j); 
    printf("%d %d %d", i, j, k); 
    return 0; 
} 
+7

问问你的朋友https://stackoverflow.com/questions/44770563/c-macros-and-variable。 – Stargateur

+0

做预处理器做的事情:用它的定义替换宏,在每次出现x和++ j时为y写入i ++。那么你会很快看到... – Aconcagua

回答

1

宏将扩大线 k=MAN(i++,j++) 作为 k=(i++)>(j++)?(i++):(j++);k=(i++)>(j++)?(i++)(j++)将不会被评估。

所以 我将两次递增,并且导致12Ĵ将一次,以便6递增当k将被分配i值为11 so its value as 11`。