2012-04-06 55 views
0

當我試圖編譯這段代碼的gcc版本4.6.3的Linux上-Wall標誌我得到這兩個警告:警告:賦值時將整數指針沒有施放[默認啓用]

  1. 它指向cmd[1]=cmd2send;

    警告:賦值時將整數指針沒有施放[默認啓用]

  2. 它指向變量static unsigned char *cmd[65]

    警告:變量「CMD」設置,但不使用[-Wunused - 丁設置變量。

是什麼讓這些警告?以及如何避免它們?

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; 
} 
+0

好..你真的想做什麼? – 2012-04-06 18:35:55

+0

無論你做什麼,**不要添加演員!**該警告的文本​​有點誤導。 – pmg 2012-04-06 18:37:51

回答

4

cmd2send是一個unsigned char,您正在設置的值爲cmd[1]這是一個char *它。 A char *是一個指針,unsigned char被視爲一個整數,因此您正在從integer製作一個指針cmd[1]而不需要轉換。

機會是你想要的字符char cmd[65]不是char *

也是一個數組的數組,因爲你創建並分配值cmd但你永遠不使用它,你會得到一個警告了這一點。

+0

請檢查第二個代碼示例 – 2012-04-06 19:11:23

+0

@MaxwellS。他也回答了這個問題。 – Morpfh 2012-04-06 19:28:48

3
static unsigned char *cmd[65]; 
.... 
cmd[1] = cmd2send; /* cmd is an array of pointers so cmd[1] is a pointer. */ 

好了,所以cmd是PF 256分的指針數組。指定charcmd[1]會生成第一個警告。

編譯器還通知您您實際上沒有在任何地方使用cmd因此它會生成第二個警告。

+0

請檢查第二個代碼示例 – 2012-04-06 19:11:18

+1

@MaxwellS。你不能保持這個線程擠奶。表明你學到了一些東西。 – cnicutar 2012-04-06 19:12:31

+0

感謝您的努力,關鍵是,即時通訊在這裏解決我的代碼警告,如果我學到了一些東西,我會毫不猶豫地展示它。 – 2012-04-06 19:24:08

相關問題