gpt4 book ai didi

c - 这段 C 代码中的括号如何使结果如此不同?

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:43 25 4
gpt4 key购买 nike

此代码的输出:

#define RECIPROCAL_1(x)     1/(x)
#define RECIPROCAL_2(x) 1/x

main()
{
float x=8.0, y;
y = RECIPROCAL_1(x+10.0);
printf("1/%3.1f = %8.5f\n", x, y);
y = RECIPROCAL_2(x+10.0);
printf("1/%3.1f = %8.5f\n", x, y);
}

是输出=

1/8.0 =  0.05556
1/8.0 = 10.12500

虽然我看不出这是如何工作的。我很感激任何提示。

最佳答案

宏替换展开如下:

y = RECIPROCAL_1(x+10.0)

成为

y = 1/(x+10.0);

y = RECIPROCAL_2(x+10.0)

成为

y = 1/x+10.0;

因为 /+ 具有更高的优先级,所以 y 的值是不同的。

这是一个很好的例子,说明为什么挑剔的程序员只在没有其他解决方案可行时才使用宏。即便如此,那些感觉不得不使用宏的有眼光的程序员也会始终使用足够的括号来确保避免此类陷阱。

关于c - 这段 C 代码中的括号如何使结果如此不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com