-2

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

int main()
{
int a=1;
printf("%d %d %d",a,a++,++a);
return 0;
}

上記のコードは出力323を与えていますなぜ????

4

3 に答える 3

3

実際にはcとc++では定義されていません。

未定義:シーケンスポイント間でスカラー値を2回変更します。これは、コードが実行していることです。シーケンスポイントが介在せずに2回 f(i++, ++i)変更されるため、未定義の動作です。i

定義の良いリスト

于 2013-01-02T11:07:59.220 に答える
2

これは未定義の動作です

a++, ++a同じシーケンスポイントで実行され、これは未定義の動作です。

未定義動作とシーケンスポイントから:

§5/4の規格では

前のシーケンスポイントと次のシーケンスポイントの間で、スカラーオブジェクトは、式の評価によって、格納されている値を最大で1回変更する必要があります。

どういう意味ですか?

非公式には、2つのシーケンスポイント間で変数を複数回変更してはならないことを意味します。式ステートメントでは、次のシーケンスポイントは通常、終了セミコロンにあり、前のシーケンスポイントは前のステートメントの終わりにあります。式には、中間のシーケンスポイントが含まれる場合もあります。

于 2013-01-02T11:06:05.197 に答える
0

プレインクリメントとポストインクリメントの仕組みについては、http://c-faq.com/expr/evalorder2.htmlで説明されています。ただし、前の回答で述べたように、この式は未定義です。

于 2013-01-02T11:12:49.443 に答える