有人可以解释每一步发生了什么吗?我知道最终的输出是140.5,但是我不确定为什么会这样。每行产生140.5的结果是什么?
#define PI 3.1
#define calcCircleArea(r) (PI * (r) * (r))
#define calcCylinderArea(r,h) (calcCircleArea(r) * h)
int main() {
double i = calcCylinderArea(3.0,5.0 + 1); printf("%g", i);
}
calcCylinderArea(3.0,5.0+1)
(calcCircleArea(3.0)*5.0+1)
注意它不是(5.0+1)
。
((PI*(3.0)*(3.0))*5.0+1)
((3.1*(3.0)*(3.0))*5.0+1)
另一个示例,(ab)使用#define
是个坏主意!
calcCylinderArea(3.0,5.0 + 1)的求值为:calcCircleArea(3.0)* 5.0 + 1,其计算方式为:PI * 3.0 * 3.0 * 5.0 + 1这是140.5
在加法之前完成乘法
要解决此问题,请将行更改为:calcCylinderArea(3.0,(5.0 + 1))以便首先完成添加。