我定义了一个函数,比如说file2.c中的myfun。 myfun返回一个浮点值。在file1.c中我没有这个函数的声明。我直接调用myfun而没有任何事先声明,并将它的返回类型赋给一个整数变量,让我们称之为retValInt。我一起编译它们。当我打印retValInt时,它给了我垃圾。为什么不转换返回的值并给出适当的整数?
以下是确切的代码:
//file1.c
#include<stdio.h>
int main()
{
int retValInt = myfun(123.456);
printf("The value returned is %d\n",retValInt);
return 0;
}
//------------------------
//file2.c
float myfun(float a)
{
return a;
}
我预计输出为123,但它是446676599。
答案 0 :(得分:2)
在编译main
时,编译器怎么可能知道myfun
会返回需要投放到float
的{{1}}?
你在问为什么编译器没有让代码做一些它不可能知道它需要做的代码。所以答案很明显 - 编译器无法知道你想要的是什么。实际上,编译器假设如果你想要它那样做是合理的,你就会告诉它。所以人们可以争辩说,你似乎期望的行为实际上是不正确的,而且令人困惑。 (你从未告诉编译器这样做,所以这样做会很糟糕。)
答案 1 :(得分:1)
在C中,特别是在C89中(但不在C99或C11中),隐式假定尚未声明的函数具有返回类型int
。如果您的实际函数没有该返回类型,则您的程序格式错误(它具有未定义的行为),并且不需要诊断。
您的代码无效C99,但C99的编译器支持充其量只是半心半意。
答案 2 :(得分:0)
在使用该函数之前编写原型。
float myfun(float);
int main()