2011-11-10 6 views
0

私は客観Cでプログラム目的Cの++演算子の動作が異なりますか?

int a = 3; 

a = (a++) * (a++); 

NSLog(@"a= %d",a); 

リターンに出力コンパイル:C#で出力が12

であるのに対し、誰もが私の行動の違いを説明でき = 11

をオブジェクティブCの++演算子?

答えて

6

++演算子には違いはありません。問題は、未定義の動作を呼び出すことです。具体的には、同じシーケンスポイント内でa変数を2回読み取って更新しています。この変数は、ANSI C仕様では明示的に定義されていません。その式から得られる値は、コンパイラごとに異なる場合があります。同じコンパイラのバージョン間でも、別々の最適化がオンになっている同じコンパイラバージョンの呼び出しであっても異なる場合があります。

+0

ありがとうございます。 – Aditi

+0

@Aditi:少なくとも[悪魔はあなたの鼻を飛ばしませんでした](http://catb.org/jargon/html/N/nasal-demons.html)! –

関連する問題