#define CANBERRA(x,y)((x-y)/(x+y))
int main(void){
/*CANBERRA(3.0,2.0)
CANBERRA(4.0,1.0)
CANBERRA(1.0+2.0,0.0+2.0)
CANBERRA(1.0+2.0,1.0+1.0)*/
float a= CANBERRA(1.0+2.0,1.0+1.0);
float b=CANBERRA(1.0+2.0,0.0+2.0);
float c=CANBERRA(4.0,1.0);
float d=CANBERRA(3.0,2.0);
printf("%f %f %f %f %f\n", a,b,c,d);
return 0; }
1 2 4 结果是为何不同?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 南七灵 2021-11-29 15:36关注
宏函数的参数是原地展开的
CANBERRA(1.0+2.0,1.0+1.0) = (1.0+2.0-1.0+1.0) / (1.0+2.0+1.0+1.0) = 3 / 5 = 0.6
同理可得第二种情况本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 Groimp使用疑问
- ¥15 c++ 主窗口里面的菜单如何脱离主窗口
- ¥15 MDK–ARM里一直找不到调试器
- ¥15 oracle中sql查询问题
- ¥15 vue使用gojs3.0版本,在nodeDataArray中的iconSrc使用gif本地路径,展示出来后动画是静态的,不是动态的
- ¥100 代写个MATLAB代码,有偿
- ¥15 ansys electronics 2021 R1安装报错,错误代码2,如图
- ¥15 Dev-c++打字不出现中文,但出现日文
- ¥30 搭建面包板由NE555N和SN74LS90N组成的计时电路时出了问题
- ¥15 无源定位系统的时差估计误差标准差