即使缺少函数原型,程序也不会给出错误

时间:2019-07-06 13:59:30

标签: c function

我读到C语言中的每个函数都应该有一个原型,而且如果一个函数接受参数或返回值,则在原型和定义中都应提及它们的数据类型。但是,我最近尝试了一段代码,其中涉及到对用户定义函数的调用,这不满足上述要求。尽管结果不正确,但是该程序没有引发任何错误。谁能提供解释?

我尝试的代码如下:

#include<stdio.h>

int main(){

printf("%f",sum(3.2, 5.6));
return 0;
}

sum(a, b){
   return a+b;
}

代码编译并成功运行,输出为0.000000。该过程以退出代码0退出。我在各种在线编译器上运行了该代码。

1 个答案:

答案 0 :(得分:2)

如果您未指定返回类型或参数类型,则C会将其隐式声明为int。

这是较早版本的C(C89和C90)的“功能”,但如今通常被认为是不好的做法。 C99标准(1999)不再允许这样做。

谈到为什么要打印0.0000的原因,是因为该函数返回一个int,它需要类型说明符%d,但是您正在使用%f,它是double的类型说明符。请参阅此stackoverflow帖子以获取进一步的说明 printing int using %f format specifier