我遇到了错误
警告:函数'Min'的隐式声明在C99中无效[-Wimplicit-function-declaration]
当试图从3个输入中找到最小值而不接触主电源时。
#include <stdio.h>
void minVal (double x, double y, double z, double minVal)
{
if (x<y && x<z)
minVal = x;
else if (y<x && y<z)
minVal = y;
else if (z<x && z<y)
minVal = z;
}
int main(void) {
double x, y, z, minVal;
printf("Please enter three numeric values: ");
scanf("%lf%lf%lf", &x, &y, &z);
minVal = Min(x, y, z);
printf("Min(%0.10f, %0.10f, %0.10f) = %0.10f\n", x, y, z, minVal);
return 0;
}
最佳答案
当您的老师召集一位缺席的学生时,所有学生都会大喊“他不在这里!”
让我们看一下警告:
这意味着,您尝试使用Min
而不在代码中声明它,这是不允许的。
它不是错误,而是警告,最终将导致链接器错误。
这里:
minVal = Min(x, y, z);
因此,您需要编写一个称为
Min
的函数,或者需要用已经声明的某个函数替换Min
。例如,void minVal (double x, double y, double z, double minVal)
现在,即使您将 call 从
Min
更改为minVal
,也无法使用。因为您的代码具有名为minVal
的函数和具有相同名称的变量。那是困惑的。养成不要使用相同名称声明变量和函数的习惯。此函数返回
void
,并且您尝试确定以double
作为数据类型的3个输入中的最小值,并将该值分配给作为参数传递的最后一个变量。可行,但与返回值相比不方便,对吗?我建议这样:
#include <stdio.h>
double Min(double x, double y, double z)
{
if (x<y && x<z)
return x;
else if (y<x && y<z)
return y;
else if (z<x && z<y)
return z;
else
return 0.0;
}
int main(void)
{
double x, y, z, minVal = 0.0;
printf("Please enter three numeric values: ");
scanf("%lf%lf%lf", &x, &y, &z);
minVal = Min(x, y, z);
printf("Min(%0.10f, %0.10f, %0.10f) = %0.10f\n", x, y, z, minVal);
return 0;
}
这段代码对您的代码进行了以下更改:
Min
重命名为minVal
。请注意,通常最好将动词/ Action 用作函数名称,以使其易于解释函数的作用。因此,如果我可以自由更改main()
函数,则在所有位置(声明和函数调用)都将使用名称Get_minValue
而不是Min
。 Min
的返回类型更改为double
,以便我可以返回值,而不是将其分配给参数。 您仍然可以通过摆脱
minVal
变量来使它变得更好,我会让您知道:-)此外,C99很旧,下次您编译代码时,请确保使用
-std=c11 -pedantic-errors
对其进行编译。Here您可以找到有关编译器选项的更多信息。