3

重複の可能性:
C マクロと括弧内の引数の使用

このマクロの質問は非常に興味深いものでした。

この次のコードがマクロとして定義されている場合

#define MULT(x, y) x * y

そして、関数呼び出しは次のように行われint z = MULT(3 + 2, 4 + 2);ます。望ましい出力は 3+2=5 および 4+2=6 であり、5*6 は 30 になります。

しかし、返された出力は 13 でした。これは、3+2*4+2 として取得されます。したがって、演算子の優先順位に従って、最初に 2*4 が評価されます。

ここでの修正は何ですか?これらのような小さな関数の場合、どれが効率的ですか? 関数を定義するか、マクロを使用しますか?

4

2 に答える 2

11

次のようなものを試してください:

#define MULT(x, y) ((x)*(y))
于 2012-06-01T09:53:15.400 に答える