我有一些用于编译(和工作)的代码,现在我收到了很多以下警告。这是在我对Ubuntu-Mate进行了一次升级之后发生的。
警告:在C ++ 11中不推荐使用动态异常规范
它发生在简单的行上(在标题中):
static Value getPriorityValue(const std::string& priorityName)
throw(std::invalid_argument);
我得到了与此相关的2545警告!反正有没有告诉编译器忽略这个警告?更改代码的最简单方法是什么?
大多数错误都在第三方软件包中,因此我不想对此软件包进行太多修改。
我的编译器中确实有-std = c ++ 11标志。
答案 0 :(得分:8)
您应该在 1 的任何地方删除或注释掉这些例外规范,例如:
static Value getPriorityValue(const std::string& priorityName);
static Value getPriorityValue(const std::string& priorityName) /* throw(...) */;
您可以使用-Wno-deprecated
选项关闭无法编辑代码的地方的折旧警告。我建议仅在编译第三方库时使用它。如果您需要包含引发此类警告的第三方标头,您可以执行 2 :
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated"
#include "thirdparty.h"
#pragma GCC diagnostic pop
这应该适用于gcc
和clang
,并且只会针对特定包含禁用-Wdeprecated
。
1 动态异常规范自C ++ 11以来已被弃用,并且自C ++ 17以来是非法的,因此您可能希望摆脱它们并升级第三方库正在尽快使用。
2 如果使用-I
参数包含这些标头,则可以切换到-isystem
以禁用这些标头的所有警告,如{{0}所述。 3}}。另请参阅@Yakk - Adam Nevraumont。