2012-03-06 539 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只是将选项重新打开。