为什么从double函数返回变为int?

时间:2016-04-28 02:21:30

标签: c int double

我有这样的双重功能:

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值?

1 个答案:

答案 0 :(得分:9)

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

在C ++和C99中,自C99以来,必须至少对此代码发出警告。检查你的编译器输出,我建议你注意任何警告信息,如果没有,请调高警告级别。

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

double f(void);

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