Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
警告:函数的隐式声明';最小值';在C99[-Wimplicit函数声明]中无效_C_Compiler Errors_C99 - Fatal编程技术网

警告:函数的隐式声明';最小值';在C99[-Wimplicit函数声明]中无效

警告:函数的隐式声明';最小值';在C99[-Wimplicit函数声明]中无效,c,compiler-errors,c99,C,Compiler Errors,C99,我发现了错误 警告:C99[-Wimplicit函数声明]中函数“Min”的隐式声明无效 当试图从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)

我发现了错误

警告:C99[-Wimplicit函数声明]中函数“Min”的隐式声明无效

当试图从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;
}
#包括
无效最小值(双x、双y、双z、双最小值)
{

如果(x如消息所述,则这是一个警告,而不是错误

您看到此消息是因为您正在调用未在任何位置声明的函数
Min
。虽然编译将成功(带有警告),但链接可能会失败,因为未定义
Min

您可能试图调用的函数在代码中的名称为
minVal
,而不是
Min

但是,您不能像现在这样从
main
调用
minVal
,因为您还定义了一个名为
minVal
的局部变量,该变量会隐藏函数名。要解决此问题,您必须重命名此变量:

double min;
...
min = minVal(x, y, z);
或者,重命名函数:

void Min(double x, double y, double z, double minVal)
...
这将导致进一步的错误:

  • minVal
    函数不返回值(其返回类型为
    void
  • minVal
    函数接受4个参数,而不是3个(但忽略第4个)
最后一点值得进一步注意。在C中,函数参数是按值传递的,所以

f(x);
无法修改
x
。类似地,在
minVal
中,最后一个参数(也称为
minVal
)只是参数的本地副本,因此分配给它不会影响函数之外的其他参数


您应该删除
minVal
参数,并
返回一个值。

当您的老师给缺席的学生打电话时,所有学生都可以大叫“他不在这里!”

让我们看看警告:

警告:C99[-Wimplicit函数声明]中函数“Min”的隐式声明无效

这意味着,您试图使用
Min
,但未在代码中声明,这是不允许的。 这不是一个错误,而是一个警告,最终将导致链接器错误

在这里:

因此,您需要编写一个名为
Min
的函数,或者需要将
Min
替换为您已经声明的函数。例如

void minVal (double x, double y, double z, double minVal)
现在,即使您将调用从
Min
更改为
minVal
,它也不会工作。因为您的代码有一个名为
minVal
的函数和一个同名的变量。这太混乱了。养成一种习惯,避免声明同名的变量和函数

此函数返回的是
void
,您试图以
double
作为数据类型确定至少3个输入,并将值分配给作为参数传递的最后一个变量。这是可行的,但与返回值相比并不方便,对吗

当试图从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;
}
我建议这样做:

#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;
}
#包括
双最小值(双x、双y、双z)
{

if(xSimple:C语言不允许调用未定义的函数(或宏)。1999年C语言改变了这一点,这就是为什么它说“C99”


为了解决此问题,您必须提供一个函数
Min
。就是这样。

您的问题已经得到正确回答,希望添加有关使用void函数的注释

void minVal (double x, double y, double z, double minVal)
minVal最有可能返回最小的值。在这个只有一个返回值的简单函数中,最好的选择确实是将代码更改为:

double minVal (double x, double y, double z, double minVal)
但是,如果您必须返回多个值,或者必须返回一个状态(例如输入两个或三个相等的数字)和一个值,那么您需要依赖引用调用。在C中,指针是一种方法

void minVal (double x, double y, double z, double* min)
{
    if (x<y && x<z)
        *min = x;

    else if (y<x && y<z)
        *min = y;

    else if (z<x && z<y)
        *min = z;
}

int main(void) {
    double x, y, z, minValue;

    printf("Please enter three numeric values: ");
    scanf("%lf%lf%lf", &x, &y, &z);
    minVal(x, y, z, &minValue);
    printf("Min(%0.10f, %0.10f, %0.10f) = %0.10f\n", x, y, z, minValue);

return 0;
}
void最小值(双x、双y、双z、双*最小值)
{

如果(xWhat is
Min
?也许是时候找一本合适的书或教程(或者回到课堂笔记或老师那里)来找出问题所在了(问题不止一个!)警告或错误不会使问题变得更严重或更不严重。它是一条诊断消息,指出C语言违规,因此相当严重。如果您希望编译器在编写无效C代码时给出错误,则必须使用
-std=c11-迂腐错误进行编译。