2013-06-01 36 views
8

當使用#warning指令時,而不是一個警告,我得到兩個 - 我生成的一個,再加上一個額外的 warning: #warning is a GCC extension [enabled by default]如何禁用有關#warning指令是GCC擴展的GCC警告?

我可以禁止#warning指令的結果本身,-Wno-cpp,但這與我想要的相反。

我可以通過改爲使用#pragma message()來解決此問題,但似乎使#warning指令顯得毫無意義 - 是否無法抑制此警告警告?

+1

您傳遞給GCC的選項是什麼? –

+0

它是'-g -static -static-libgcc -Wall -Wextra -pedantic -Wno-vla -Wsizeof-pointer-memaccess -Wmissing-declaration -march = native -fexceptions -fexpensive-optimizations -flto -O3 -std = C++ 1y -sanitize = address'在這種情況下 - 請參閱下面的答案,我意識到這是負責任的選項。 – Riot

回答

3

啊,似乎-pedantic選項啓用此警告,似乎並沒有一個特定的覆蓋,因爲有大多數其他GCC警告。刪除-pedantic擺脫了有關警告的警告。

0
#ifdef __GNUC__ 
#warning "no warning here!" 
#endif 

將帶或不帶GCC編譯,甚至-pedantic,但它還是會給予警告,(如果警告升級到錯誤失敗)。

UPDATE: 根據this related question,沒有乾淨的解決方案有選擇地禁用對特定的GNU-的#pragma小號

+0

無論如何,它肯定會編譯,但是這並沒有做任何事情來擺脫警告:'警告:#warning是一個GCC擴展[默認啓用]' – Riot

+0

是的,我剛剛意識到這一點。絕望地尋找一個編譯來讓這個該死的東西關閉。 (加入'#pragma GCC diagnostic ignored'-Wunknown-pragmas''似乎不起作用。) – wildplasser

0

其實,下面應該工作的警告。有了這個,你可以抑制/忽略gcc警告。

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wcpp" 

... 

#pragma GCC diagnostic pop 
+2

雖然這是一個好主意,但我擔心這樣做不適用於防範警告。在此處查看測試代碼:http://coliru.stacked-crooked.com/view?id=53358c525169b7c2750ed1eb09dff702-0f11904895a20602a6e5ca9f4b5b0039 – Riot