2012-02-24 9 views
0

可能性の重複:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)実行ターボの違いと視覚

が、考えてみて、視覚CでC

int a=0; 

printf("%d%d%d%d",++a,a+1,a++,++a); 

++での2コード行以下は、それが

を与えます

出力:3431

しかし、ターボC++ では得られます。

出力:3311

をまた、これは、コンパイラに依存しているのですか?

+0

シーケンスポイントがない場合の評価の順番は[不特定の動作]です(http://en.wikipedia.org/wiki/Unspecified_behavior)。 – dasblinkenlight

+1

これは[C++ SO FAQ](http://loungecpp.wikidot.com/faq#toc11) –

+0

のエントリによって回答されています。@Matはシーケンスポイントではありません。 –

答えて

2

Cの仕様では、関数の引数が評価される順序が指定されていないため、どのような出力が得られるかは保証されていません。

+1

出力が保証されているだけではありません。彼はシーケンスポイント間で 'a'を複数回修正しました。これは未定義の動作につながります。したがって、「3または4になる可能性がある」という問題だけでなく、「ハードディスクをフォーマットする」、「マシンを爆破する」、または本質的に他のものを含めることもできます。 –

関連する問題