【问题标题】:Using [[deprecated]] attribute when warnings are errors (-Werror)当警告是错误时使用 [[deprecated]] 属性 (-Werror)
【发布时间】:2019-02-19 11:07:13
【问题描述】:

我正在迁移到 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++ 发出警告但排除特定的警告不被视为错误?

【问题讨论】:

    标签: c++ compiler-errors g++ c++14 compiler-warnings


    【解决方案1】:

    你需要添加

    -Wno-error=deprecated-declarations
    

    告诉 gcc 将 deprecated-declarations 保留为警告而不是使其成为错误。

    您可以添加额外的

    -Wno-error=name_of_warning
    

    如果您还有不希望被视为错误的其他警告。

    【讨论】:

      【解决方案2】:

      使用 GCC(以及 Clang),您可以禁用特定警告的错误。

      使用-Wno-error= 后跟警告名称(与警告或错误一起显示)将禁用该特定项目的错误。

      对于您使用[[deprecated]] 的情况,请使用选项-Wno-error=deprecated-declaration,这些将再次成为警告而不是错误。

      【讨论】:

      • 我收到g++: error: unrecognized command line option ‘-Werror-no-deprecated-declarations’; did you mean ‘--warn-no-deprecated-declarations。它所暗示的那个完全使战争沉默
      • @virgesmith 哎呀,小错字...已修复:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多