永发信息网

c语言宏定义计算, #define f(x) x*x main() ( int i i=f

答案:4  悬赏:20  手机版
解决时间 2021-03-04 00:19
  • 提问者网友:辞取
  • 2021-03-03 21:14
c语言宏定义计算,
#define f(x) x*x

main()
(
int i
i=f(4+4)/f(2+2)
)
结果i怎么是3
最佳答案
  • 五星知识达人网友:洎扰庸人
  • 2021-03-03 22:50
应该改为:#define f(x) ((x)*(x)) i = ((6+6)*(6+6))/((2+2)*(2+2)) = 9 x要括起来, 整个运算还要括起来,这样除法才不会出错。少一个括号都不行! 如少一个#define f(x) (x)*(x),则 i = (6+6)*(6+6)/(2+2)*(2+2)=144, 还是错!
全部回答
  • 1楼网友:动情书生
  • 2021-03-04 01:20
这里要注意,宏替换与函数参数传递有区别。 i =( 4+4*4+4)/(2+2*2+2)=24/8=3
  • 2楼网友:長槍戰八方
  • 2021-03-04 00:27
i=f(4+4)/f(2+2)=4+4*4+4/2+2*2+2=28 如果#define f(x) (x*x) i=f(4+4)/f(2+2)=(4+4)*(4+4)/(2+2)*(2+2)=64 #define f(x) x*x i=(f(4+4))/(f(2+2)); 这样i=f(4+4)/f(2+2)=(4+4*4+4)/(2+2*2+2)=24/8=3 你想到达到你的效果要这样写 #define f(x) ((x)*(x)) i=(f(4+4))/(f(2+2)); 这样i= ((4+4)*(4+4))/((2+2)*(2+2))=4 多加点括号就好
  • 3楼网友:玩世
  • 2021-03-03 23:45
这代码都是错的, 怎么可能会输出i是3. 宏函数和函数最根本的区别就是, 宏函数真的是你传的啥, 它就变成啥, 就按你传的数据来说: f(x) 第一个f的x就是4 + 4, 那么在宏函数里x就会被替换, 注意是替换, 成4+4, 即: f(4 + 4) 等同于 4+4 * 4+4 而f(2+2)是同理, 它等同于2+2*2+2 宏它是一种纯文本的改变, 可以说预处理器它就是一个自动的文本编辑器, 把一些特定的单词, 换成另一些字符.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯