2013-02-02 63 views
0

簡單的設置:有n個原型用於函數的功能和實現。有一大堆函數指針。每個函數都列在這個數組中。使用gcc進行編譯時,一些仍然會導致使用--Wunused功能。是什麼導致編譯器警告未使用的函數?

代碼:

void foo1(void); 
void foo2(void); 
void bar1(void); 
void bar2(void); 

/* and their implementations */ 

void (*functions[])(void) = { foo1, foo2, bar1, bar2 }; 

這是安裝的樣子(只是一個例子)!當使用gcc編譯時,這個foo/bar函數中的一個現在會導致一個-Wunused-function警告。其他人沒有。爲什麼?

+2

你可以發佈一些我們可以實際編譯得到警告的東西嗎? – cnicutar

+0

我無法說服我的gcc(4.7.1)發出警告。你用什麼版本? –

+0

那麼,實際的代碼當然要複雜得多。它有一些更多的錯誤,目前沒有鏈接,但如果你想,你可以編譯它:http://beyermatthias.de/git/index.php?p=minx.git&a=shortlog&h=refs/heads/split_source我的gcc版本是4.7.2 – musicmatze

回答

4

-Wunused功能

時發出警告的靜態函數被聲明,但沒有定義或者非在線靜態功能未被使用。此警告由啓用 - 牆

這一警告似乎觸發當一個功能是從來沒有使用過當函數聲明(原型),但沒有定義。

你確定你沒有錯過實現你聲明的任何函數嗎?

+0

如果以這種方式使用沒有定義的函數,則會得到鏈接器錯誤,而不是編譯器警告。 – cnicutar

+0

嗯。是的,我確定並檢查了它。這對我來說很奇怪! – musicmatze

+0

@cnicutar:如果你沒有實際調用它,則不需要。 –

相關問題