0
私は客観Cでプログラム目的Cの++演算子の動作が異なりますか?
int a = 3; a = (a++) * (a++); NSLog(@"a= %d",a);
リターンに出力コンパイル:C#で出力が12
であるのに対し、誰もが私の行動の違いを説明でき = 11
をオブジェクティブCの++演算子?
私は客観Cでプログラム目的Cの++演算子の動作が異なりますか?
int a = 3; a = (a++) * (a++); NSLog(@"a= %d",a);
リターンに出力コンパイル:C#で出力が12
であるのに対し、誰もが私の行動の違いを説明でき = 11
をオブジェクティブCの++演算子?
++
演算子には違いはありません。問題は、未定義の動作を呼び出すことです。具体的には、同じシーケンスポイント内でa
変数を2回読み取って更新しています。この変数は、ANSI C仕様では明示的に定義されていません。その式から得られる値は、コンパイラごとに異なる場合があります。同じコンパイラのバージョン間でも、別々の最適化がオンになっている同じコンパイラバージョンの呼び出しであっても異なる場合があります。
ありがとうございます。 – Aditi
@Aditi:少なくとも[悪魔はあなたの鼻を飛ばしませんでした](http://catb.org/jargon/html/N/nasal-demons.html)! –