【问题标题】:Does Q_UNUSED have any side effects?Q_UNUSED 有副作用吗?
【发布时间】:2013-11-03 19:21:56
【问题描述】:

给定以下代码:

void test(int var)
{
     Q_UNUSED(var);
#ifdef SOMETHING
     printf("%d",var);
     //do something else with var...
#endif
}

如果我在某些场景中实际使用“var”变量(如上面的示例),Q_UNUSED 宏是否会有任何效果,或者当我禁止未使用变量的编译器警告时它根本没有效果?

到目前为止,我观察到它没有任何效果,但我想确定一下。

【问题讨论】:

  • 看看它的文档。如果没有,请阅读其定义。 (提示:它可能没有。它肯定不可能呈现变量“不可用”。我猜它类似于((void)(expression));
  • @H2CO3:它不能重新声明var 以使任何后续使用变得模棱两可吗? extern qUnusedType var;
  • @H2CO3:正确,没那么神奇。
  • 我在 CodeReview SE 上发布了一个 "UNUSED with teeth"... 供任何对实际破坏数据的想法感兴趣的人使用。 (破坏它并不理想,但即使在标准 C++ 注释中也继续使用未使用注释的无牙性,令人费解的是 [[maybe_unused]] on the parameter definition,而不是让您在控制流中标记点,之后您不需要变量使用并让编译器捕获它。)

标签: c++ qt macros qtcore


【解决方案1】:

在很多情况下不会(例如,只是将一个简单的变量传递给宏)。定义在qglobal.h里面:

#  define Q_UNUSED(x) (void)x;

禁用未使用的变量警告。您可以毫无问题地使用此宏之后的变量。

但是,如果您将表达式或其他内容传递给宏并且编译器必须评估该表达式,则它可能会产生副作用

【讨论】:

  • 唯一的副作用,我可以看到,如果您从 Qt 切换到移植工作,但这并不是什么大问题,因为无论如何您都会遇到更多问题。
猜你喜欢
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 2018-02-14
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多