gpt4 book ai didi

c - 输出意外

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:07 24 4
gpt4 key购买 nike

#include<stdio.h>
#define MAX(a,b) ((a)>(b))?(a):(b)
int main()
{
double a = 100 , b, c, e;
int d = -1;
b = 336;
c = -33.600000000000001;
e = a + (MAX(b, abs(c)) * d);
printf("max is %f", e);
return 0;
}

这个程序的输出是 436 而逻辑上它应该是 -236 。任何人都可以解释为什么这个程序的输出是不同的。

最佳答案

宏替换后,a + (MAX(b, abs(c)) * d)变为:

a + (((b) > (abs(c))) ? (b) : (abs(c)) * d)

请注意,* 的优先级高于 ?:,因此结果不是您所期望的。

正确的宏应该是:

#define MAX(a,b) (((a)>(b))?(a):(b))
// ^ ^

这是一个教训,你应该尽可能避免使用宏。因为很难编写正确的类函数宏。

关于c - 输出意外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639002/

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