我在Fedora 16上使用GNU gcc 4.6.2。我正在使用第三方API编写一个应用程序,编译后,我收到了很多警告。
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**,但是不起作用。
谢谢。
6条答案
按热度按时间ruarlubt1#
-Wno-unused-local-typedefs
在GCC 4.8中工作。z4iuyo4d2#
gcc允许你用
-isystem
开关来指定某些库包含路径应该被当作 system 库来处理,这允许那些头文件相对于你在代码的其余部分使用的标志被特殊处理。所以,例如,如果你在test.cpp
中使用某些Boost库时有未使用的本地typedef(我最近使用包含Boostsignals2
库时遇到了这种情况)并且上面的构建不干净,请尝试以下操作
这将(前提是来自您在
test.cpp
中包含的Boost库的警告当然是您唯一的问题)。juud5qan3#
根据gcc源代码(gcc/cp/decl.c:4108):
在gcc 4.6.2中没有命令行标志(即0所代表的)来抑制此警告。
iqjalb3h4#
由于
-Wunused-local-typedefs
是-Wall
的一部分,请确保在-Wno-unused-local-typedefs
之后没有-Wall
。如果有,-Wall
只是再次打开该选项。u0sqgete5#
在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
(抱歉,我无法张贴一个示例,因为它被认为是严重的缩进堆栈溢出)
kkbh8khc6#
这个GCC警告意味着你的typedef可能是重复的,你应该删除typedef关键字。例如:
上面的代码是类型重复的,因为枚举类已经定义为类型。所以你必须删除typedef关键字以及结尾的Something!