#define CUBE(x)(x*x*x)
int main()
{
int a, b;
b = 3;
a = CUBE(b++)/b++;
printf(a=%d b=%d\n", a, b);
return 0;
}
このマクロ定義ステートメントに混乱がありますか? 出力も必要ですか?
一部
CUBE(b++)
に変換されます
(b++ * b++ * b++)
これは、1 つのステートメントで変数を変更するため、未定義の動作または問題があります。そのようなことは避けることをお勧めします。
++
orなしで変数を渡してみてください--
。
a=CUBE(b++)/b++;
|
V
a=(b++ * b++ * b++)/b++ ;
上記の式では、シーケンス ポイント間で b 値を変更すると、Sequence_pointがないために未定義の動作が発生します。
この最初の割り当てを回避し、次にインクリメントするには
a=CUBE(b)/b;
b++;
#define CUBE(x) ((x)*(x)*(x))
が式の場合の間違いを避けるために使用しx
ます。
a = CUBE(b++)/(b++);
ステートメントを実行した後の a の値は、使用するコンパイラなどによって異なります。これは と呼ばれundefined behavior
ます。