0

-WallLinuxでフラグ付きのgccバージョン4.6.3を使用してこのコードをコンパイルしようとすると、次の2つの警告が表示されます。

  1. それは指しますcmd[1]=cmd2send;

    警告:代入により、キャストなしで整数からポインタが作成されます[デフォルトで有効]

  2. 変数を指しますstatic unsigned char *cmd[65]

    警告:変数'cmd'は設定されていますが、使用されていません[-Wunused-but-set-variable]。

これらの警告の原因は何ですか?そしてそれらを回避する方法は?

  int CommandHandler(unsigned char cmd2send)
    {
        static unsigned char *cmd[65];

        // *make sure device is open*
        if(handle==NULL) // handle defined in transceiver.h
        {
            puts("CommandHandler::Cant handle command");
            // try to open device again
            if(OpenMyDev()!=0)
            return -1;
            // if no return then retry is fine
            puts("retry SUCCEEDED!, device is open");
        }

        // *send command to firmware*
        cmd[0]=0x0;
        cmd[1]=cmd2send;
        .......
        return 0;

    }

ここでも、可変電圧に関する警告#2が表示されます。

float Get_Temperature(void)
{
    //unsigned char RecvByte=0;
    //int byte[4];

    int i;

    float voltage=0;
    float resistance=0;
    float temperature=0;
    float SamplesAVG=0;

    unsigned int Samples=0;

    unsigned char* rvc;
    unsigned char mydata[65];


    for(i=0;i<=10;i++)
    {
        //Transimit Start Of Frame
        mydata[0]=0;
        mydata[1]=GET_TEMPERATURE;

        if(Write2MyDev(mydata)<0)  {return -1;}

        rvc=ReadMyDev(0);

        SamplesAVG+=(rvc[0]<<24)+(rvc[1]<<16)+(rvc[2]<<8)+rvc[3];
        usleep(100*1000);
    }

    Samples=SamplesAVG/10;
    printf("TO PRINT VAL:%d\n",Samples);
    puts("------------");

    voltage = (Samples * 5.0)/1023.0; // 0..1203= 1024 values
    resistance = 10000.0/ (1023.0/Samples);
    ...
    return retval;
}
4

2 に答える 2

4

cmd2sendはであり、にであるunsigned char値を設定しています。Aはポインターであり、anは整数のように扱われるため、キャストなしでポインターを作成しています。cmd[1]char *char *unsigned charcmd[1]integer

char cmd[65]の配列ではなく、文字の配列が必要な場合がありますchar *

また、値を作成して割り当てたcmdが、使用したことがないため、そのことについても警告が表示されます。

于 2012-04-06T18:36:17.047 に答える
3
static unsigned char *cmd[65];
....
cmd[1] = cmd2send; /* cmd is an array of pointers so cmd[1] is a pointer. */

さて、cmd256ポインタの配列もそうです。を割り当てると、最初の警告charが生成されます。cmd[1]

コンパイラは、実際にはcmdどこも使用していないことにも気付くため、2番目の警告が生成されます。

于 2012-04-06T18:34:42.263 に答える