2012-03-06 542 views
2

我在Fedora 16上使用GNU gcc 4.6.2。我正在編寫一個使用第三方API的應用程序,編譯後,我得到了很多警告。gnu gcc如何禁止警告:在此聲明中忽略'typedef'[默認啓用]

warning: ‘typedef’ was ignored in this declaration [enabled by default] 

只是想知道我該如何抑制?我用-Wall標誌編譯我的程序。

在本文檔中,http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html中提到了類似-Wunused-local-typedefs

我試過-Wno-unused-local-typedefs,但不起作用。

謝謝。

+9

你可以顯示一個導致該警告的示例聲明嗎? – aschepler 2012-03-06 16:15:16

+0

http://stackoverflow.com/questions/6399898/is-the-typedef-name-optional-in-a-typedef-declaration顯示了各種發出該警告的示例。 – 2012-03-06 16:28:46

+0

什麼是第三方API?它是用C還是C++編寫的?也許這可以幫助你: http://stackoverflow.com/questions/913344/how-can-i-remove-the-vs-warning-c4091-typedef-ignored-on-left-of-spreadsh ? – CygnusX1 2012-03-06 16:25:09

回答

6

根據gcc的源代碼(GCC/CP/decl.c:4108):

warning (0, "%<typedef%> was ignored in this declaration"); 

沒有命令行標誌(也就是0代表)來禁止這種警告在gcc 4.6.2。

7

-Wno-unused-local-typedefs適用於我的gcc 4.8。

+1

你的答案是什麼?說這是舊編譯器中的一個錯誤?他以錯誤的方式使用該選項?它不以任何方式幫助原始海報... – mozzbozz 2014-09-11 12:15:19

+0

請重新閱讀原始問題以及它與我的答案的關係。 – 2014-09-11 20:48:19

+1

也許我們在交叉目的......我看到的是:\t提問者問如何禁用警告。而且「-Wno-unused-local-typedefs」不適用於他。然而,你只用一行來回答:「-Wno-unused-local-typedefs適用於我的gcc 4.8」。我想知道你現在想要暗示的是什麼(我不想冒犯你,只是想澄清一下);)如果你用更多的話來回答,而不僅僅是一個單一的話,這會更清楚。 ..我現在多次重讀這個問題和答案,仍然沒有得到你想要用你的答案提供的信息? rgds – mozzbozz 2014-09-12 12:44:55

4

GCC允許你指定某些庫包括路徑應被視爲系統庫與-isystem開關,允許相對於你在你的代碼的其餘部分使用標誌的頭特別處理。因此,舉例來說,如果你在test.cpp使用某些Boost庫擁有未使用的本地類型定義(我就遇到了這個使用包括升壓signals2庫最近)

g++ -o test{,.cpp} -Wall -Wextra -Werror -I /usr/local/boost-1.55.0/include -L /usr/local/boost-1.55.0/lib 

和上面沒有建立乾淨嘗試以下

g++ -o test{,.cpp} -Wall -Wextra -Werror -isystem /usr/local/boost-1.55.0/include -L /usr/local/boost-1.55.0/lib 

這將(提供的警告來自Boost庫,你包括在test.cpp是你唯一的問題當然)。

0

在C++ 17,你應該使用maybe_unused,請參閱

http://en.cppreference.com/w/cpp/language/attributes

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0212r0.pdf

(對不起,我便無法發佈一個例子,因爲它被視爲嚴重的縮進計算器)

+0

'maybe_unused'不適用於gcc(Debian 6.3.0-18)6.3.0 20170516.但是,'__attribute __((未使用的))'工作。未使用的typedefs通常用於[C static assertions](https://stackoverflow.com/questions/3385515/static-assert-in-c)。 – Ale 2017-12-14 15:31:50

-1

由於-Wunused-local-typedef-Wall的一部分,請確保您在-Wno-unused-local-typedef之後沒有-Wall。如果這樣做,-Wall只是將選項重新打開。