C++ gnu gcc如何抑制警告:‘;typedef’;在此声明中被忽略[默认启用]

C++ gnu gcc如何抑制警告:‘;typedef’;在此声明中被忽略[默认启用],c++,gcc,warnings,gnu,C++,Gcc,Warnings,Gnu,我在Fedora16上使用GNU gcc 4.6.2。我正在使用第三方API编写一个应用程序,在编译之后,我收到了很多警告 warning: ‘typedef’ was ignored in this declaration [enabled by default] 只是想知道我怎样才能抑制这种情绪?我用-Wall标志编译我的程序 在本文档中,它提到了类似于-wUsed local typedefs的内容 我尝试了-Wno未使用的本地typedef,但不起作用 谢谢。根据gcc源代码(gcc/

我在Fedora16上使用GNU gcc 4.6.2。我正在使用第三方API编写一个应用程序,在编译之后,我收到了很多警告

warning: ‘typedef’ was ignored in this declaration [enabled by default]
只是想知道我怎样才能抑制这种情绪?我用-Wall标志编译我的程序

在本文档中,它提到了类似于-wUsed local typedefs的内容

我尝试了-Wno未使用的本地typedef,但不起作用


谢谢。

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

警告(0,“%在此声明中被忽略”);

没有命令行标志(这就是0所代表的)若要在gcc 4.6.2中禁止此警告,请执行以下操作。

-Wno unused local typedefs在gcc 4.8中对我有效。

gcc允许您使用
-issystem
开关指定某些库包含路径应被视为系统库,该开关允许对这些头进行与您在其余代码中使用的标志相关的特殊处理。例如,如果您在
test.cpp
中使用某些Boost库时未使用本地typedef(我最近使用Boost
signals2
库遇到了这个问题)

而且上面的构建不干净,请尝试以下方法

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

这将(如果您在测试中包含来自Boost库的警告。当然,cpp是您唯一的问题)。

在c++17中,您应该使用可能未使用的,请参阅


(很抱歉,我无法发布一个示例,因为它被stackoverflow视为严重缩进)

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

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

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

上面的代码是类型重复的,因为枚举类已定义为类型。因此,您必须删除typedef关键字以及结尾处的内容

您能给出一个导致该警告的示例声明吗?什么是第三方API?它是用C或C++写的吗?也许这可以帮助你:?显示了发出该警告的各种示例。如果收到该警告,可能意味着您应该从声明中删除
typedef
关键字。如果警告指向第三方代码,请考虑通知作者。你的答案是什么?假设这是旧编译器中的一个bug?他以错误的方式使用了这个选项?这对原始海报没有任何帮助…请重新阅读原始问题,以及它与我的答案之间的关系。可能我们的目的不同。。。我看到的是:提问者正在询问如何禁用警告。而且“-Wno未使用的本地typedefs”对他不起作用。但您只回答了一行:“-Wno未使用的本地typedefs在GCC4.8中为我工作”。我想知道你想暗示什么(我不想冒犯你,只是想澄清一下);)如果你能多回答几句,而不是一句话,那就更清楚了。。。我现在多次重读这个问题和答案,但仍然没有得到你试图用答案传达的信息?rgds
可能不适用于gcc(Debian 6.3.0-18)6.3.0 20170516。但是,
\uuuuuu属性(未使用))
可以工作。未使用的typedef通常用于。
g++ -o test{,.cpp} -Wall -Wextra -Werror -isystem /usr/local/boost-1.55.0/include -L /usr/local/boost-1.55.0/lib
typedef enum class Something {
  THING1,
  THING2,
} Something;