-1

我唯一想到的是,MULT((3+2)(5*4))= 100 而不是 62?有人可以解释一下吗?

#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 回答