【问题标题】:Supressing "unused parameter" warning inside of code抑制代码中的“未使用参数”警告
【发布时间】:2015-07-17 10:17:48
【问题描述】:

我想在代码中抑制未使用的参数警告。

我的第一个方法是:

void RenderGraphFrame::mouseReleaseEvent(QMouseEvent *UNUSED(event))
{
    MousebuttonHold = false;
    updateGL();
    return;
}

定义如下:

#define UNUSED(NAME) USE_IT(NAME)
#define USE_IT(NAME) UNUSED_ ## NAME

这不起作用。经过一些 SO 研究后,我发现在 C++ 中我可以做到:

void RenderGraphFrame::mouseReleaseEvent(QMouseEvent)
{/*...*/}

这很好地解决了警告的问题,但是现在...... mouseReleaseEvent() 不再被触发。 所以这对我也不起作用。

那么我还有哪些其他方法可以使用代码变体来抑制警告?

【问题讨论】:

  • 除了匿名参数之外,(void)NAME; 是一个常用的习惯用法,用于将变量标记为未使用(虽然在技术上以毫无意义的方式使用它)。所以你想#define UNUSED(NAME) ((void)NAME)
  • @leemes:但这必须在函数体中完成,对吧?我无法想象它会在参数列表中工作。因为它会抛出一个额外的类型。
  • 对,在体内。抱歉,我没有看到您在示例中如何使用宏,我以为您在谈论在正文中使用它。 - 啊,我现在看到你使用 Qt。已经有一个宏:Q_UNUSED ;)
  • @leemes:但我想在参数列表中使用它。无论如何感谢您的输入:)
  • 然后,除了匿名参数之外,您还可以尝试在参数名称后添加__attribute__((unused)),或者至少在函数签名期间禁用警告(通过在签名)。但是这两种解决方案都是非标准的。

标签: c++ qt macros


【解决方案1】:

解决方案 #1 – 未命名参数:

void RenderGraphFrame::mouseReleaseEvent(QMouseEvent *)

解决方案 #2 – Qt Q_UNUSED 宏:

void RenderGraphFrame::mouseReleaseEvent(QMouseEvent *event)
{
    Q_UNUSED(event)
    // Your code...
}

其实这个宏就是定义下一个方法:

解决方案 #3 – C 方式:

void RenderGraphFrame::mouseReleaseEvent(QMouseEvent *event)
{
    (void)event;
    // Your code...
}

【讨论】:

    【解决方案2】:

    这是因为QWidget::mouseReleaseEvent的参数是一个指针。您必须保留 *:

    void RenderGraphFrame::mouseReleaseEvent(QMouseEvent*)
    {
      // Your code
    }
    

    【讨论】:

    • 是的,带有可选虚拟声明的可怕重载解决方案会导致此类问题...... C++ 的弱点之一......
    猜你喜欢
    • 2014-12-23
    • 2014-04-24
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2011-02-11
    • 2019-01-09
    相关资源
    最近更新 更多