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;

}

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
}

前もって感謝します。

はい、アプリケーションはマルチスレッドです。サーバーから mainClient の n インスタンスを作成します。ソースコードへのリンク (上に書いたものは単純化されています)。 mainClient.c Utilities.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()はグローバルを使用しませんtmpRes。に渡してもグローバルのtmpResままです。0Evaluate()

于 2013-06-11T09:28:45.493 に答える