当警告为错误时使用 [[deprecated]] 属性 (-Werror)
Using [[deprecated]] attribute when warnings are errors (-Werror)
我正在迁移到 C++14 并热衷于采用它的 [[deprecated]]
功能,例如
#include <string>
#include <iostream>
[[deprecated]]
int f() { return 42; }
int main()
{
std::cout << f() << std::endl;
}
用
编译
g++ example.cpp -std=c++14 -Werror
问题是不推荐使用的警告被提升(降级?)为错误并且构建失败。
显然使用 #pragma
来消除警告完全没有意义。有没有办法告诉 g++ 发出警告但排除特定的警告不被视为错误?
使用 GCC(还有 Clang),您可以禁用特定警告的错误。
使用 -Wno-error=
后跟警告名称(与警告或错误一起显示)将禁用该特定项目的错误。
对于 [[deprecated]]
的情况,使用选项 -Wno-error=deprecated-declaration
,这些将再次变成警告而不是错误。
您需要添加
-Wno-error=deprecated-declarations
告诉 gcc 保留 deprecated-declarations
作为警告而不是让它成为错误。
您可以添加额外的
-Wno-error=name_of_warning
如果您有其他警告但不希望也被视为错误。
我正在迁移到 C++14 并热衷于采用它的 [[deprecated]]
功能,例如
#include <string>
#include <iostream>
[[deprecated]]
int f() { return 42; }
int main()
{
std::cout << f() << std::endl;
}
用
编译g++ example.cpp -std=c++14 -Werror
问题是不推荐使用的警告被提升(降级?)为错误并且构建失败。
显然使用 #pragma
来消除警告完全没有意义。有没有办法告诉 g++ 发出警告但排除特定的警告不被视为错误?
使用 GCC(还有 Clang),您可以禁用特定警告的错误。
使用 -Wno-error=
后跟警告名称(与警告或错误一起显示)将禁用该特定项目的错误。
对于 [[deprecated]]
的情况,使用选项 -Wno-error=deprecated-declaration
,这些将再次变成警告而不是错误。
您需要添加
-Wno-error=deprecated-declarations
告诉 gcc 保留 deprecated-declarations
作为警告而不是让它成为错误。
您可以添加额外的
-Wno-error=name_of_warning
如果您有其他警告但不希望也被视为错误。