唯一让我想到的是,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");
}
答案 0 :(得分:13)
当扩展宏时,这个:
MULT(ADD(a,b),MULT(c,d))
变为:
a + b * c * d
,用它们的值替换变量,相当于:
2 + 3 * 4 * 5
,根据优先级规则计算的此表达式的值为62,因为乘法的优先级高于加法。
不要为此目的使用宏:使用函数。
答案 1 :(得分: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
答案 2 :(得分:3)
避免使用C ++中的宏
这样做可以解决您的问题:
#define ADD(x1, y1) ((x1) + (y1))
#define MULT(x1,y1) ((x1) * (y1))
但不要这样做。
而是使用函数(必要时使用内联函数)。
int ADD(int x1, int y1) {
return x1+y1;
}