私の言うところのコードでは、出力は11 6 10
であるべきですが、それは12 6 11
です。 からとy=6
のように3進演算子によって返されたk=x
の値はi=11
,j=6
およびk=10
です。なぜ出力が不一致であるのですか?以下のコードでマクロ展開はどのように機能しますか?
#include <stdio.h>
#define MAX(x,y)(x)>(y)?(x):(y)
int main()
{
int i=10,j=5,k=0;
k=MAX(i++,++j);
printf("%d %d %d",i,j,k);
return 0;
}
動作が完全に定義されていても、間違っています。 –
'k =(i ++)>(++ j)と比べて? (i ++):(++ j) 'これはマクロが展開するものです。 – dxiv
あなたがThe International Obfuscated C Code Contestに参加しない限り、このようなコードを書くことはありません。 – kaitian521