C浮点在传递给函数后重置为0
在下面的代码中,变量“tmpRes”在调用“BuildCMD”之前是正确的 但是在这个函数中,它失去了正确的值并设置为0,为什么它甚至在BuildCMD函数中也没有保持正确的值呢 呼叫代码: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
//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的情况下编译了!