我在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 ,但无效。
感谢。
答案 0 :(得分:8)
-Wno-unused-local-typedef对我来说在gcc 4.8中有效。
答案 1 :(得分:7)
gcc允许您指定某些库包含路径应被视为带有-isystem
开关的 system 库,这些库允许这些标题对您在其余部分使用的标志进行特殊处理你的代码因此,例如,如果您在test.cpp
中使用某些Boost库而使用未使用的本地typedef(我最近使用了包含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
将提供来自test.cpp
中包含的Boost库的警告当然是您唯一的问题。
答案 2 :(得分:6)
根据gcc-source-code(gcc / cp / decl.c:4108):
warning (0, "%<typedef%> was ignored in this declaration");
在gcc 4.6.2中没有命令行标志(这就是0代表什么)来抑制此警告。
答案 3 :(得分:1)
由于-Wunused-local-typedef
是-Wall
的一部分,请确保-Wall
之后没有-Wno-unused-local-typedef
。如果您这样做,-Wall
只需重新打开选项。
答案 4 :(得分: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
(抱歉,我无法发布示例,因为它被认为是stackoverflow严重缩进)
答案 5 :(得分:0)
此GCC警告表示您的typedef可能重复了,您应该删除typedef关键字。例如:
typedef enum class Something {
THING1,
THING2,
} Something;
上面的代码是重复类型,因为enum类已经定义为类型。因此,您还必须删除typedef关键字以及结尾处的内容!