int main()
{
int a=1;
printf("%d %d %d",a,a++,++a);
return 0;
}
上記のコードは出力323を与えていますなぜ????
int main()
{
int a=1;
printf("%d %d %d",a,a++,++a);
return 0;
}
上記のコードは出力323を与えていますなぜ????
未定義:シーケンスポイント間でスカラー値を2回変更します。これは、コードが実行していることです。シーケンスポイントが介在せずに2回 f(i++, ++i)
変更されるため、未定義の動作です。i
これは未定義の動作です
a++, ++a
同じシーケンスポイントで実行され、これは未定義の動作です。
§5/4の規格では
前のシーケンスポイントと次のシーケンスポイントの間で、スカラーオブジェクトは、式の評価によって、格納されている値を最大で1回変更する必要があります。
どういう意味ですか?
非公式には、2つのシーケンスポイント間で変数を複数回変更してはならないことを意味します。式ステートメントでは、次のシーケンスポイントは通常、終了セミコロンにあり、前のシーケンスポイントは前のステートメントの終わりにあります。式には、中間のシーケンスポイントが含まれる場合もあります。
プレインクリメントとポストインクリメントの仕組みについては、http://c-faq.com/expr/evalorder2.htmlで説明されています。ただし、前の回答で述べたように、この式は未定義です。