2012-11-04 40 views
3
gcc 4.7.2 c89 

你好,指針/整數類型不匹配

我收到以下警告:

pointer/integer type mismatch in conditional expression 

我用下面的CFLAGS -Wall -Wextra

fprintf(stderr, "'Failed to open file' Error [ %s ]\n", 
     (errno == 0) ? "None" : strerror(errno)); 

所述程序編譯運行正常,但我看不出警告是全部。 「None」和strerror(errno)都返回一個字符串,而不是整數值。我將errno數字與零比較。

非常感謝您的任何建議,

+0

不,我沒有。我剛剛收錄了它,警告消失了。這是因爲string.h包含strerror函數。但是,如果是這樣的話,我已經在手冊頁中看到了。所以不應該給我一個編譯錯誤?謝謝。 – ant2009

+1

很久以前,C語言允許你使用一個沒有聲明的函數。然後它會假定該函數返回一個「int」。這種行爲現在是非標準的(因爲你遇到了後果),但許多編譯器仍然接受它以與舊代碼兼容。我很驚訝你沒有使用'-Wall -Wextra'得到一個警告(對於函數的使用,而不僅僅是條件表達式)。 –

回答

5

檢查您是否已經包括<string.h>頭。如果不是,則可以將strerror的返回值視爲整數值。這可以解釋爲什麼程序運行正常(鏈接器可以找到名爲strerror的匹配函數,因爲C標準庫默認是鏈接的),而編譯器會報告警告。

+0

謝謝,問題解決了。 – ant2009