1

次の最大マクロを定義しました

#define max(a,b)(a>b?a:b);

main() 内で次のことを行っています

int t,a,b,c,d;

t=max(a,b)+max(c,d);

しかし、出力は期待どおりではありません。t は a と b の最大値のみを示しています。何が問題なのですか?

4

2 に答える 2

2

を取り外します;。a#defineは単なるテキスト置換です。

また、ベスト プラクティスとして括弧で囲む必要がありaます。b比較演算子はおそらくあなたが渡す可能性のあるものよりも優先されるため、これは一般的にあまり役に立ちませんが、次のように言います。

    #define mul(a, b) (a * b)

そして、これからあなたmul(5-3, 10+2)は出力が 24 (2 * 12) になると予想しますが、実際に実行されるのは5-3 * 10+2であり、操作の順序を使用すると、これは になる5-(3*10)+2ため、答えは代わりに -23 になります。と定義されていた場合

    #define mul(a, b) ((a) * (b))

この問題はありません。

于 2013-11-07T19:21:48.683 に答える