1

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

この単純なCプログラムをGCCで試しました

#include<stdio.h>
int main(){
int x=5;
printf("%d,%d,%d,%d,%d",++x,x++,x,x++,++x);
return 0;
}

出力は9,7,7,6,6でした。トレースして、6,6,7,7,9と出力されると想定しましたが、逆の順序で想定を見つけました。どうしてですか。

4

1 に答える 1

4

プログラムの動作が未定義であるためです。関数の引数の評価の間にシーケンスポイントはなく、シーケンスポイントを介さずに同じオブジェクトを複数回変更することは未定義の動作です。

プログラムは単に不正な形式です。有効なCプログラムではありません。

于 2012-11-28T01:44:03.990 に答える