gnu gcc如何抑制警告:此声明中忽略了“typedef”[默认情况下启用]

5fjcxozz  于 2022-12-19  发布在  其他
关注(0)|答案(6)|浏览(240)

我在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**,但是不起作用。
谢谢。

ruarlubt

ruarlubt1#

-Wno-unused-local-typedefs在GCC 4.8中工作。

z4iuyo4d

z4iuyo4d2#

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库的警告当然是您唯一的问题)。

juud5qan

juud5qan3#

根据gcc源代码(gcc/cp/decl.c:4108):

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

在gcc 4.6.2中没有命令行标志(即0所代表的)来抑制此警告。

iqjalb3h

iqjalb3h4#

由于-Wunused-local-typedefs-Wall的一部分,请确保在-Wno-unused-local-typedefs之后没有-Wall。如果有,-Wall只是再次打开该选项。

u0sqgete

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
(抱歉,我无法张贴一个示例,因为它被认为是严重的缩进堆栈溢出)

kkbh8khc

kkbh8khc6#

这个GCC警告意味着你的typedef可能是重复的,你应该删除typedef关键字。例如:

typedef enum class Something {
  THING1,
  THING2,
} Something;

上面的代码是类型重复的,因为枚举类已经定义为类型。所以你必须删除typedef关键字以及结尾的Something!

相关问题