C语言中的函数警告

C语言中的函数警告,c,function,warnings,C,Function,Warnings,大家好,我有三个功能,我得到4个警告 第一个是这个 void evaluatearxikos(void) { int mem; int i; double x[NVARS+1]; FILE *controlpointsarxika; controlpointsarxika = fopen("controlpointsarxika.txt","r"); remove("save.txt"); for(mem = 0; mem <

大家好,我有三个功能,我得到4个警告

第一个是这个

void evaluatearxikos(void)
{
    int mem;
    int i;
    double x[NVARS+1];

    FILE *controlpointsarxika;

    controlpointsarxika = fopen("controlpointsarxika.txt","r");
    remove("save.txt");


    for(mem = 0; mem < POPSIZE; mem++)
    {
        for(i = 0; i < NVARS; i++)
        {
            x[i+1] = population[mem].gene[i];


        }
        rbsplinearxiki();

        XfoilCall();

        population[mem].fitness = FileRead();
        remove("save.txt");


    }

       fclose(controlpointsarxika);
}
void evaluatearxikos(void)
{
int-mem;
int i;
双x[NVARS+1];
文件*controlpointsarxika;
controlpointsarxika=fopen(“controlpointsarxika.txt”、“r”);
删除(“save.txt”);
对于(mem=0;mem
对于这一个编译器警告我变量x已设置但未使用。。。!!但实际上我使用的是变量x

第二个功能是这个

void elitist(void)
{
    int i;
    double best,worst;
    int best_mem,worst_mem;

    best = population[0].fitness;
    worst = population[0].fitness;

    for(i = 0; i < POPSIZE - 1; i++)
    {
        if(population[i].fitness > population[i+1].fitness)
        {
            if(population[i].fitness >= best)
            {
                best = population[i].fitness;
                best_mem = i;
            }

            if(population[i+1].fitness <= worst)
            {
                worst = population[i+1].fitness;
                worst_mem = i+1;
            }
        }

        else
        {
            if(population[i].fitness <= worst)
            {
                worst = population[i].fitness;
                worst_mem = i;
            }

            if(population[i+1].fitness >= best)
            {
                best = population[i+1].fitness;
                best_mem = i+1;
            }
        }
    }

    if(best >= population[POPSIZE].fitness)
    {
        for(i = 0; i < NVARS; i++)
        {
            population[POPSIZE].gene[i] = population[best_mem].gene[i];


        }

        population[POPSIZE].fitness = population[best_mem].fitness;
    }

    else
    {
        for(i = 0; i < NVARS; i++)
        {
            population[worst_mem].gene[i] = population[POPSIZE].gene[i];

        }

        population[worst_mem].fitness = population[POPSIZE].fitness;
    }
}
void精英(void)
{
int i;
最好的加倍,最差的加倍;
int最佳记忆,最差记忆;
最佳=总体[0]。适合度;
最差=总体[0]。适合度;
对于(i=0;i总体[i+1]。适合度)
{
if(总体[i]。适合度>=最佳)
{
最佳=总体[i]。适合度;
最佳记忆=i;
}
if(总体[i+1]。适合度=总体[POPSIZE]。适合度)
{
对于(i=0;i
对于这一个,我得到两个警告,变量best_mem和best_mem可能未初始化就用于此函数中..!!但我对这两个变量都初始化了值

第三个功能是

void crossover(void)
{
    int mem,one;
    int first = 0;
    double x;

    for(mem =0; mem < POPSIZE; mem++)
    {
        x = rand()%1000/1000;

        if(x < PXOVER)
        {
            first++;

            if(first%2 == 0)
            {
                random_Xover(one,mem);
            }

            else
            {
                one = mem;
            }
        }
    }
}
void交叉(void)
{
int-mem,一个;
int first=0;
双x;
对于(mem=0;mem
我得到的结果是变量one可以被单位化..!!但是它被初始化了

你能告诉我这些函数有什么问题吗


提前感谢您

在您的第一个函数中,您设置(分配)x,但您从未读取过它,因此您没有使用它…写入它只会浪费CPU周期。(还要注意,因为您将其索引为
i+1
,所以您的写入超出了为其分配的空间)

在第二个函数中,您对这些变量的初始化是在条件块中进行的。您可以看到(也许?我没有验证)在所有条件下它们都已初始化,但您的编译器没有那么聪明


在您的第三个函数中,似乎可以引用
one
,而无需先初始化。

在您的第一个函数中,您设置(分配)x,但您从未读取它,因此您没有使用它……您只是通过写入它来浪费CPU周期。(还要注意,因为您将其索引为
i+1
,所以您的写入超出了为其分配的空间)

在第二个函数中,您对这些变量的初始化是在条件块中进行的。您可以看到(也许?我没有验证)在所有条件下它们都已初始化,但您的编译器没有那么聪明

在第三个函数中,似乎可以引用
one
,而无需先初始化

  • x
    变量仅在左侧使用(即赋值)。您不能在右侧使用该值或将其传递给函数
  • (i=0;i的循环可能会结束,而这些变量没有给定值。为什么不在声明中设置它们呢
  • 未设置
    one
    时,可以调用对
    random\Xover(one,mem);
    的调用。将行
    int mem,one;
    更改为
    int mem,one=;
  • x
    变量仅在左侧使用(即赋值)。您不能在右侧使用该值或将其传递给函数
  • (i=0;i的循环可能会结束,而这些变量没有给定值。为什么不在声明中设置它们呢
  • 未设置
    one
    时,可以调用对
    random\Xover(one,mem);
    的调用。将行
    int mem,one;
    更改为
    int mem,one=;

  • 首先:您设置了
    x
    ,但不使用它。它是一个局部变量,可以设置,但一旦函数返回,它就会被删除

    第二:可能有一些值使得您的
    best\u mem/best\u mem
    永远不会在您的
    if/else
    中设置,但您以后会使用它们。如果尚未设置,则如果未初始化,它们将包含垃圾

    第三:虽然在代码中尝试使用未初始化的变量是不应该发生的,但它看起来仍然很奇怪,而且编译器不认为它不会第一次发生


    当您收到编译器警告时,treat被视为您做了错误的事情,或者不建议这样做,并且可以用更好的方式来做。

    首先:设置
    x
    ,但不要使用它。它是一个局部变量,会被设置,但一旦函数返回就会被删除

    第二:可能有一些值使得您的
    best\u mem/best\u mem
    永远不会在您的
    if/else
    中设置,但您以后会使用它们。如果尚未设置,则如果未初始化,它们将包含垃圾

    第三:虽然您不应该尝试使用未初始化的