0
#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;
}

このマクロ定義ステートメントに混乱がありますか? 出力も必要ですか?

4

3 に答える 3

1

一部

CUBE(b++)

に変換されます

(b++ * b++ * b++)

これは、1 つのステートメントで変数を変更するため、未定義の動作または問題があります。そのようなことは避けることをお勧めします。

++orなしで変数を渡してみてください--

于 2013-09-14T05:19:12.130 に答える
0
a=CUBE(b++)/b++;  

      |  
      V  


a=(b++ * b++ * b++)/b++ ;    

上記の式では、シーケンス ポイント間で b 値を変更すると、Sequence_pointがないために未定義の動作が発生します。

この最初の割り当てを回避し、次にインクリメントするには

   a=CUBE(b)/b;
   b++; 
于 2013-09-14T05:25:26.393 に答える
0
  1. #define CUBE(x) ((x)*(x)*(x))が式の場合の間違いを避けるために使用しxます。

  2. a = CUBE(b++)/(b++);ステートメントを実行した後の a の値は、使用するコンパイラなどによって異なります。これは と呼ばれundefined behaviorます。

于 2013-09-14T05:27:18.413 に答える