【发布时间】: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,而不是让您在控制流中标记点,之后您不需要变量使用并让编译器捕获它。)