Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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
C浮点在传递给函数后重置为0_C_Function_Pointers - Fatal编程技术网

C浮点在传递给函数后重置为0

C浮点在传递给函数后重置为0,c,function,pointers,C,Function,Pointers,在下面的代码中,变量“tmpRes”在调用“BuildCMD”之前是正确的 但是在这个函数中,它失去了正确的值并设置为0,为什么它甚至在BuildCMD函数中也没有保持正确的值呢 呼叫代码: //tmpRead just an array of integer float tmpRes=0; Evaluate(tmpRead[3],tmpRead[4],tmpRead[5],&tmpRes); printf("PRE : %f\n",tmpRes); //correct result

在下面的代码中,变量“tmpRes”在调用“BuildCMD”之前是正确的 但是在这个函数中,它失去了正确的值并设置为0,为什么它甚至在BuildCMD函数中也没有保持正确的值呢

呼叫代码:

//tmpRead just an array of integer
float tmpRes=0;
Evaluate(tmpRead[3],tmpRead[4],tmpRead[5],&tmpRes);
printf("PRE : %f\n",tmpRes);   //correct result
char *dataBuff=BuildCMD(RES,tmpData,tmpRes);
评估代码:

int Evaluate(int num1,int op,int num2,float *Res)
{
     float tmpRes=0;
     switch(op)
     {
           case(int)'+':{tmpRes=num1+num2;break;} //same with *Res=....
           case(int)'-':{tmpRes=num1-num2;break;}
           //etc...
     }
    *Res=tmpRes;
    return 0;
}

BuildCMD:

char* BuildCMD(enum CMD cmd,int *values,float result)
{
     //here the result is ALWAYS 0
     //even if it was corrent before the call of BuildCMD
     printf("IN: %f\n,result);   
     fflush(stdout);
     //...rest of the code
}
提前谢谢

是的,应用程序是多线程的,我从服务器创建了n个mainClient实例。 到源代码的链接(我上面写的是简化的)。

听起来调用BuildCMD的代码没有适合该函数的原型

您需要在main.c或main.c包含的.h文件中使用此原型:

char* BuildCMD(enum CMD cmd,int *values,float result);

您有
float tmpRes=0内部
评估()
。因此实际上
Evaluate()
并没有使用全局
tmpRes
。全局
tmpRes
保持
0
状态,即使您将其传递到
Evaluate()

在调用代码调用它们之前,是否包含
BuildCMD()
Evaluate()
函数的原型?我们需要看到更多的代码。哦,对了,调用代码和两个函数在两个不同的文件中。调用代码在“main.c”中,而“BuildCMD”和“Evaluate”在“Utilities.c”中,但由于它们在代码中相互看到,所以除了包含CMD enum的“Data.h”之外,我没有包含任何内容。Ps:我将在tynipaste中发布完整的代码,给我一分钟。这是单线程还是多线程?在BuildCMD中printf引号没有正确关闭
tmpRes
是通过指针传递的,名为
Res
,更新正确。是的,非常感谢!正如您所说,我在mainClient.c文件中声明了BuildCMD和Evaluate,现在它可以正常工作了,谢谢!这也解决了我的一个问题。再也不要在没有-Werror的情况下编译了!