gpt4 book ai didi

c - 为什么 double 函数的返回值变成了 int?

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

我有这样的双重功能:

double f(){
double value=0.1234;
return value;
}

在另一个函数中,我收到了值并将其打印出来。

printf("%f",f());

我想看到值 0.1234 被打印出来了,但是 0 被打印出来了。如果我这样转换类型:

printf("%f",(double)f());

会打印一个非常奇怪的值,如 -147923499.34。

经过一些检查(print sizeof),我发现 f() 的返回值是 4 个字节,而 double 类型应该是 8 个字节。

那么,造成这种情况的根本原因是什么?如何从函数返回正确的 double 值?

最佳答案

听起来您在没有范围内原型(prototype)的情况下调用了 f()。在 C89 中,编译器通过假设 f 返回 int 对此作出 react 。如果 f 的实现实际上没有返回 int 那么行为是未定义的。

在 C++ 中,以及自 C99 以来的 C 中,至少对于这段代码必须有一个警告。检查您的编译器输出,我建议您注意任何警告消息,如果没有,请调高警告级别。

要修复代码,请编写原型(prototype):

double f(void);

调用函数之前。将原型(prototype)放在头文件中是正常的,调用函数的代码和实现函数的代码都包含该头文件。然后编译器将检测调用和实现之间的不匹配。

关于c - 为什么 double 函数的返回值变成了 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36904142/

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