-1

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

printf 関数は右から左に実行され、左から右に印刷されると聞きました。その慣例により、次のプログラムは 7,6,5 を返すはずです。しかし、私のLinux gccコンパイラでは7,7,7になっています。コンパイラ依存ですか?

int i=5;
printf("%d %d %d\n",++i,++i,i);

また、cdecl/pascal キーワードを使用して、printf の実行順序を変更できますか? はいの場合、どうすればよいですか?私はこれをやろうとしましたが、成功しませんでした。事前にサンクス!

4

2 に答える 2

1

関数呼び出しの標準によって決定される順序はないため、引数は、コンパイラが適合すると思われる任意の順序で評価できます。したがって、パラメーターの評価に副作用がある場合、未定義の動作が発生します。

于 2012-05-21T17:20:18.763 に答える
1

シーケンス ポイントがないため、コードの評価順序は未定義です。関数の引数の評価順序を中継することも、変更することもできません。

http://www2.research.att.com/~bs/bs_faq2.html#evaluation-order を確認してください

于 2012-05-21T17:20:56.657 に答える