重複の可能性:
これらの未定義の動作(i = i ++ + ++ i、i = i ++など)を誰かが説明でき
ますか?次のマクロがアプリケーションにどのような問題をもたらす可能性がありますか?
iOS(Objective Cコード)に実装するためのマクロ拡張を使用したサンプルアプリケーションを作成しました。
それは次のようなものです:
#define SQUARE(x) ( x * x )
main( )
{
int i = 3, j, k ;
j = SQUARE( i++ ) ;
k = SQUARE( ++i ) ;
printf ( "\nValue of i++ = %d\nValue of ++i = %d", j, k ) ;
}
出力は次のとおりです。
Value of i++ = 9
Value of ++i = 49
期待される出力は次のとおりです。
Value of i++ = 9
Value of ++i = 25
この結果に驚いています。私はこのマクロ展開と少し混乱しています。
なぜそれが起こったのですか?理由を見つけるのを手伝ってください。