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

Gccでの出力:7 6 8

誰かが答えを説明できますか?この質問が繰り返された場合はお詫び申し上げますが、見つかりませんでした。

ありがとう!!

4

1 に答える 1

19

インクリメント演算子の間にシーケンスポイントがないため、動作は未定義です。

コードが何をするのかを説明するのは無意味な練習です。動作が定義されていないコードを記述しないでください。たとえそれが機能しているように見えても。

コメントで提起されたポイントに対処するには:コンマ演算子がシーケンスポイントとして機能することは事実ですが、ここでのコンマはコンマ演算子ではありません。ウィキペディアから:

演算子としてのコンマトークンの使用は、関数呼び出しと定義、変数宣言、列挙型宣言、およびセパレータとして機能する同様の構造での使用とは異なります。

于 2010-07-15T20:21:56.917 に答える