3

重複の可能性:
誰でもこれらの未定義の動作を説明できますか (i = i++ + ++i 、 i = i++ など…)

以下にコードがありますが、コードのロジックを理解する上で非常に深刻な問題に直面しています。

#include <stdio.h>
#include <stdlib.h>

int main(void )
{
int i = 1 ;
printf("\n%d %d %d %d\n",++i,i++,i++,++i) ;
return 0 ;
}

Mandriva という名前の Linux ディストリビューションで gcc コンパイラを使用しています。上記では、printfステートメントで変数を使用して事前および事後インクリメントを使用しました。私が得るはずの出力は 2 2 3 5 ですが、別の出力を得ています。このコードで私を助けてください。

私はこのコードで非常に困難を感じています。

4

1 に答える 1

8

未定義の動作です。のインクリメントの間にシーケンス ポイントはありませんi

どの結果も正しい結果です (ハード ドライブのフォーマットを含む)。

于 2012-11-26T07:22:08.377 に答える