在我的GCC代碼中,我得到了很多這兩種類型的警告。在GCC下禁止不兼容的指針類型特定警告
warning: passing argument 1 of 'foo' from incompatible pointer type
和
warning: assignment from incompatible pointer type
我知道,通常情況下,這兩個是什麼表明真的錯了代碼中的嚴重警告。就我而言,無論這些事情發生在哪裏,我都很清楚自己在做什麼,我知道我可以放心地忽略這些警告。 (是的,我相信它)
但是現在我的代碼已經發展到這樣的程度,這些警告遮蓋了其他任何東西,實際上隱藏了潛在的警告,可能導致我一個討厭的錯誤。所以我決定禁止他們。很快我意識到我不知道如何。我的gcc版本是4.4.1,我知道我可以使用:
#pragma GCC diagnostic ignore "-Wname"
忽略我想要的任何警告。但從我發現的GCC警告中唯一的big and comprehensive list,我似乎無法找到這兩個是哪個。我開始逐個挑選它們,並將它們轉化爲錯誤,以查看由於不兼容的指針類型而導致編譯停止的時間,但無法在下面找到。
#pragma GCC diagnostic error "-Wimplicit-int"
#pragma GCC diagnostic error "-Waddress"
#pragma GCC diagnostic error "-Wreturn-type"
.... //e.t.c.
所以..問題是,沒有任何人知道這些警告的名字,這樣我可以真正抑制呢?
編輯
由於我要澄清一種誤解,認爲我有這意見的討論使我相信,我不得不抑制警告。我認爲在結構指針之間進行明確的轉換需要花費一些成本(不管多麼微不足道)。
所以我現在意識到的思想是有缺陷的,是因爲我的程序在不同的平臺下工作了很長時間,爲什麼要添加工作來滿足編譯器呢?
那麼我現在已經意識到,並且正在寫這裏,以防其他人在這個話題上絆倒,並有相同的思路。沒有參與執行指針的顯式類型轉換的成本,其優點有:
- 編譯器停止嘮叨你的警告
- 其他人可以知道你會做演員故意那裏並沒有犯錯
因此,這裏是任何其他人可能有相同的問題。
請始終注意警告 - 他們在那裏是有原因的。用'-Wall'標誌設置編譯是一個非常好的主意 - 然後去解決警告。 – 2012-02-25 22:21:13
出於好奇,絕不會懷疑你的天才,請問這是什麼原因導致了警告? – 2012-02-25 22:22:29
@EdHeal我同意你的看法,這就是爲什麼我想禁用這兩個,因爲在我的代碼中他們沒有幫助我,而是掩蓋了其他可能有用的警告。 我需要解決的是編譯器禁止我的工作,而不是實際幫助我。我有理由忽視這些特定的警告。問題是如何做到這一點,以便我可以專注於「真實」的警告 – Lefteris 2012-02-25 22:25:27