27

给定以下代码:

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

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

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

4

1 回答 1

39

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

#  define Q_UNUSED(x) (void)x;

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

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

于 2013-10-24T21:24:05.650 回答