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

Akr*_*Akr 1 c double int

我有这样的双重功能:

double f(){
     double value=0.1234;
     return value;
}
Run Code Online (Sandbox Code Playgroud)

在另一个功能中,我收到了值并打印出来.

printf("%f",f());
Run Code Online (Sandbox Code Playgroud)

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

printf("%f",(double)f());
Run Code Online (Sandbox Code Playgroud)

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

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

那么,这个的根本原因是什么?如何从函数中返回正确的double值?

M.M*_*M.M 9

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

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

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

double f(void);
Run Code Online (Sandbox Code Playgroud)

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