给出以下代码:
void test(int var)
{
Q_UNUSED(var);
#ifdef SOMETHING
printf("%d",var);
//do something else with var...
#endif
}
如果我在某些情况下实际使用'var'变量(如上例所示),Q_UNUSED
宏是否会产生任何影响,或者当我抑制未使用变量的编译器警告时它根本没有效果?
到目前为止,我发现它没有效果,但我想确定一下。
答案 0 :(得分:27)
在许多情况下都没有(例如,只是将一个简单的变量传递给宏)。定义在qglobal.h
:
# define Q_UNUSED(x) (void)x;
禁用未使用的变量警告。您可以在此宏之后使用该变量而不会出现任何问题。
但是,如果将表达式或其他内容传递给宏,并且编译器必须评估表达式,则可能会产生副作用† 。