use*_*893 1 c floating-point runtime-error division function-declaration
这应该是一个递归函数,当 i 小于 'h' 时,它不断向 'h' 添加 1/i 的值,但我在函数声明中不断收到冲突类型错误,我做错了什么?它只是发生在浮动中。
#include <stdio.h>
int main()
{
int i=0, n = 5;
float h;
division(i, n, h);
return 0;
}
float division(int i, int n, float h)
{
if(i<n)
{
h += 1/i;
division(i, n, h);
}
else
{
printf("the sum is: %f",h);
return h;
}
}
Run Code Online (Sandbox Code Playgroud)
引起“冲突类型错误”的问题是在尝试调用函数的division()范围内没有函数声明。main()自 C99 以来,此类函数调用是不符合标准的,但许多编译器提供了在此类函数调用中使用的隐式声明,因为这是原始 C 的行为,并通过 C90 支持。
然而,在这种情况下使用的隐式声明相当于
int division(int i, int n, double h);
Run Code Online (Sandbox Code Playgroud)
,它与实际的函数签名不匹配且不兼容。当编译器稍后发现这一点时,它会发出诊断信息来警告您。可能它会因为这个原因拒绝代码——这个问题并不清楚。
要解决这种情况,您必须在(第一次)使用函数之前声明该函数。一种方法是移动divisionbefore的整个定义main(),但您也可以只在 before 中添加函数的前向声明main()。这看起来与上面(错误的)声明类似,但它会正确反映函数的真实返回类型和参数类型:
float division(int i, int n, float h);
Run Code Online (Sandbox Code Playgroud)