Q_UNUSED有副作用吗?

Ily*_*kiy 20 c++ macros qt qtcore

鉴于以下代码:

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

Q_UNUSED如果我在某些情况下实际使用'var'变量(如上例中所示),那么宏是否有任何影响,或者当我抑制未使用变量的编译器警告时它根本没有效果?

到目前为止,我发现它没有效果,但我想确定一下.

mas*_*oud 31

在许多情况下没有(例如只是将一个简单的变量传递给宏).定义在里面qglobal.h:

#  define Q_UNUSED(x) (void)x;
Run Code Online (Sandbox Code Playgroud)

禁用未使用的变量警告.您可以在此宏之后使用该变量而不会出现任何问题.

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

  • 我可以看到,唯一的副作用是如果你从Qt切换到移植工作,但这不是什么大问题,因为无论如何你会有更多的问题. (4认同)