#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)
谁能解释一下每一步发生了什么? 我知道最终输出是 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)