#define in C: 发生了什么

#define in C: what is happening

谁能解释一下每一步发生了什么? 我知道最终输出是 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 计算为: 圆周率 * 3.0 * 3.0 * 5.0 + 1 即 140.5

乘法先于加法

要解决此问题,请将行更改为: calcCylinderArea(3.0,(5.0 + 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)