c语言求救

2025-02-03 06:12:15
推荐回答(4个)
回答1:

你用的都是宏定义,宏定义编译的时候替换的。具体到你这个问题,PRINT1(FUDGE(5)*x);
是这样替换的,FUDGE(5)*x这个整体作为参数宏定义里的参数a,这里面还有一个参数宏FUDGE(5),它是这么替换的,2.84+5。而在PRINT1这个宏里,替换后的参数为2.84+5*2。又因为你是int类型,所以输出为12。
一些建议:
宏里面只是简单替换,不会帮你改变运算顺序,如果需要请用小括号改变相关运算顺序。
PRINT1(FUDGE(5)*x);修改为PRINT1( ( FUDGE(5) ) *x);看看。
宏参数记得加上小括号。#define FUDGE(y) 2.84+y中的y写成 2.84+(y)
希望对你有所帮助。

回答2:

宏展开后就是:
y就是5
FUDGE(5)就是2.84+5
a就是FUDGE(5)*2=2.84+5*2
PR(a)就是printf("%d",(int)(2.84+5*2))----就是输出12
PRINT1(FUDGE(5)*x);就是先输出12,然后换行(putchar('\n'))

回答3:

FUDGE(5) 会被替换为 2.84+5
所以 PRINT1的参数FUDGE(5)*x 是 2.84+5*x,乘法优先级高,所以5.x先计算,参数表达式值是 12.84, 转成整数是12.

回答4:

不会先计算2.84+y,是把2.84+y*x一起计算,也就是(int) (2.84+5*2)结果是12