2012-11-04 84 views
2

我得到這個錯誤,不能修復,我還是noob,如果有人可以幫助我,我會感謝你 這段代碼來自libxenon的xmplayer (對於JTAG的Xbox)警告:控制到達非void函數結束(C++)

(我嘗試搜索類似的錯誤,但我找不到什麼是錯的)

int FileSortCallback(const void *f1, const void *f2) { 
    /* Special case for implicit directories */ 
    if (((BROWSERENTRY *) f1)->filename[0] == '.' || ((BROWSERENTRY *) f2)->filename[0] == '.') { 
     if (strcmp(((BROWSERENTRY *) f1)->filename, ".") == 0) { 
      return -1; 
     } 
     if (strcmp(((BROWSERENTRY *) f2)->filename, ".") == 0) { 
      return 1; 
     } 
     if (strcmp(((BROWSERENTRY *) f1)->filename, "..") == 0) { 
      return -1; 
     } 
     if (strcmp(((BROWSERENTRY *) f2)->filename, "..") == 0) { 
      return 1; 
     } 
    } 

    /* If one is a file and one is a directory the directory is first. */ 
    if (((BROWSERENTRY *) f1)->isdir && !(((BROWSERENTRY *) f2)->isdir)) return -1; 
    if (!(((BROWSERENTRY *) f1)->isdir) && ((BROWSERENTRY *) f2)->isdir) return 1; 

    //Ascending Name 
    if (XMPlayerCfg.sort_order == 0) { 
     return stricmp(((BROWSERENTRY *) f1)->filename, ((BROWSERENTRY *) f2)->filename); 
    } 
    //Descending Name 
    else if (XMPlayerCfg.sort_order == 1) { 
     return stricmp(((BROWSERENTRY *) f2)->filename, ((BROWSERENTRY *) f1)->filename); 
    } 
    //Date Ascending 
    else if (XMPlayerCfg.sort_order == 2) { 
     if (((BROWSERENTRY *) f2)->date == ((BROWSERENTRY *) f1)->date) { //if date is the same order by filename 
      return stricmp(((BROWSERENTRY *) f2)->filename, ((BROWSERENTRY *) f1)->filename); 
     } else { 
      return ((BROWSERENTRY *) f1)->date - ((BROWSERENTRY *) f2)->date; 
     } 
    } 
    //Date Descending 
    else if (XMPlayerCfg.sort_order == 3) { 
     if (((BROWSERENTRY *) f2)->date == ((BROWSERENTRY *) f1)->date) { //if date is the same order by filename 
      return stricmp(((BROWSERENTRY *) f1)->filename, ((BROWSERENTRY *) f2)->filename); 
     } else { 
      return ((BROWSERENTRY *) f2)->date - ((BROWSERENTRY *) f1)->date; 
     } 
    } 
}
+2

您似乎有一系列'else if's,但沒有'else'。編譯器可能會被掛在上面,即使你處理了每一個可能的值。 – chris

+0

'我是一個noob ..'這裏是初學者:警告不是一個錯誤 –

+0

@Aniket,它是當你使用'-Werror'。我知道它說標題中的警告,但我無法抗拒。 – chris

回答

6

編譯器分析你的代碼,並看到一個return語句會爲所有的值被執行05之間的sort_order。但是,如果sort_order爲負數或大於5,則代碼將在沒有返回語句的情況下到達函數的末尾;這就是編譯器發出警告的原因。

請注意,由於代碼其他部分的限制,因此可能無法將sort_order設置爲負數或5以上的數字。然而,編譯器並不知道這一點,所以它認爲sort_order可以有任何價值。

要解決此問題,請在最後添加無條件返回語句。

+0

啊......現在我明白了... thx的解釋 –

相關問題