-1

頭に浮かんだのは、MULT((3+2)(5*4))= 62 ではなく 100 ということだけでした。誰かがこれを説明できますか?

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#define ADD(x1, y1) x1 + y1
#define MULT(x1,y1) x1 * y1


int _tmain(int argc, _TCHAR* argv[])
{
    int a,b,c,d,e,f,g;
    a=2;
    b=3;
    c=4;
    d=5;
    e= MULT(ADD(a,b),MULT(c,d));
    printf("the value of e is: %d\n", e);
    system("PAUSE");
}
4

3 に答える 3

13

マクロを展開すると、次のようになります。

MULT(ADD(a,b),MULT(c,d))

になります:

a + b * c * d

変数をその値に置き換えると、次のようになります。

2 + 3 * 4 * 5

乗算は加算よりも優先順位が高いため、優先順位規則に従って評価されたこの式の値は 62 です。

この目的でマクロを使用しないでください。関数を使用してください。

于 2012-08-14T20:19:21.427 に答える
10

()sがないため、次のようになります。

e = a + b * c * d;

なぜなら:

MULT(ADD(a,b),MULT(c,d)) -> MULT(a + b,c * d) -> a + b * c * d

そう、

e = 2 + 3 * 4 * 5 = 2 + 60 = 62
于 2012-08-14T20:19:34.477 に答える
3

C++ でマクロを避ける

あなたの問題はこれを行うことで解決されます:

#define ADD(x1, y1) ((x1) + (y1))
#define MULT(x1,y1) ((x1) * (y1))

しかし、それをしないでください。

代わりに関数 (必要に応じてインライン関数) を使用します。

int ADD(int x1, int y1) {
    return x1+y1;
}
于 2012-08-14T20:23:18.557 に答える