努力追求可能 2021-11-29 15:27 采纳率: 66.7%
浏览 24
已结题

1 2 4 结果是为何不同?


#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; }

img

  • 写回答

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条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 修改了问题 11月29日
  • 创建了问题 11月29日

悬赏问题

  • ¥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 无源定位系统的时差估计误差标准差