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