[#在C中定义:正在发生的事情

问题描述 投票:0回答:2

有人可以解释每一步发生了什么吗?我知道最终的输出是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);
}
c area
2个回答
1
投票

步骤0

calcCylinderArea(3.0,5.0+1)

步骤1

(calcCircleArea(3.0)*5.0+1)

注意它不是(5.0+1)

步骤2

((PI*(3.0)*(3.0))*5.0+1)

步骤3

((3.1*(3.0)*(3.0))*5.0+1)

另一个示例,(ab)使用#define是个坏主意!


0
投票

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))以便首先完成添加。

© www.soinside.com 2019 - 2024. All rights reserved.