0

在下面的代码中,变量“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;

}

构建CMD:

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 实例。指向源代码的链接(我上面写的那个是简化的)。 mainClient.c 实用程序.c

4

2 回答 2

2

听起来调用 BuildCMD 的代码没有该函数的正确原型。

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

char* BuildCMD(enum CMD cmd,int *values,float result);
于 2013-06-11T09:28:45.440 回答
0

你有float tmpRes=0;里面Evaluate()。所以实际上Evaluate()不使用 global tmpRes。全局tmpRes仍然存在0,即使您将其传递给Evaluate().

于 2013-06-11T09:28:45.493 回答