【问题标题】:[[maybe_unused]] attribute not working[[maybe_unused]] 属性不起作用
【发布时间】:2018-11-19 22:44:19
【问题描述】:

我正在尝试使用新的 c++17 属性 [[maybe_unused]] 忽略 unused parameter 警告,如下所示。

int main([[maybe_unused]] int argc, char** argv)
{
    //...
}

但我仍然收到 warning: unused parameter ‘argc’ [-Wunused-parameter] 以及以下附加警告。

warning: ‘maybe_unused’ attribute directive ignored [-Wattributes]

我正在使用 g++ (GCC) 7.2.0cmake-3.11.3。我的编译器标志如下。

-std=c++17 -Wall -pedantic -Wextra -Weffc++

我记得以前成功使用过这个属性,但我不知道为什么现在不起作用。有人可以在这里显示我做错了什么吗?

【问题讨论】:

  • 这是 C++。如果您完全不使用它,请不要命名它。
  • 该警告意味着编译器不支持[[maybe_unused]]。但是在这里的 g++ 7.2 上工作得很好:godbolt.org/g/7KnuDx 仔细检查编译器版本,以及生成的 makefile 实际使用的编译器标志。也就是说,正如 StoryTeller 指出的那样,[[maybe_unused]] 在函数参数中是多余的,因为您可以简单地将其保留为未命名。
  • 在当前编译器中,该属性按预期工作:gcc.godbolt.org/z/csf4Ezvzb

标签: c++ gcc cmake c++17


【解决方案1】:

您可以通过这种方式抑制未使用变量的警告:

int main(int /* argc */, char** argv)
{
    //...
}

或使用以下技巧:

int main(int argc, char** argv)
{
    (void)argc;

    //...
}

在这种情况下,此代码适用于早期版本的 C++ 标准,甚至适用于纯 C。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2011-03-31
    • 2012-07-23
    • 2016-07-16
    • 2020-01-24
    • 2015-09-05
    • 2011-06-19
    相关资源
    最近更新 更多