这定义了什么,我将如何使用它?
#define UNUSED(VAR) (void)&(VAR)
它需要在任何地方定义吗?这是在标题中。
编辑 - 我真的不明白这里发生了什么。这是一个宏观的演员无效吗?这不是否定变量?
答案 0 :(得分:2)
存在以避免对未使用的参数和变量发出警告。简单地转换为void
就足够了:它使用变量,而 通常什么都不做。我只能猜测&
运算符在这里使用了什么。也许是prevent a conversion operator from being called。但是,它不是prevent an overloaded operator&
from being called。或者可以确保它仅用于变量,但这也不完美:it can be used on expressions that produce references.
答案 1 :(得分:1)
目的是防止自己收到有关未使用参数的编译器警告。
更好的方法就是匿名,例如
void do_stuff( int x, int );
在这种情况下,第二个参数未使用。它可能需要存在一些过载目的。
关于将它用于局部变量 - 你必须问自己,为什么声明一个局部变量然后不使用它?
答案可能是您在代码中使用预处理器,以便有时使用变量但不总是如此。然而,预处理它的存在可能并不总是可行的。
如果你真的使用它,你声明一个未使用的变量的事实不会使它成为错误。
答案 2 :(得分:0)
这是一个宏,可以用来阻止编译器抱怨/警告有关已被删除但未被引用的变量。通常使用编译器#pragma设置来实现相同的结果,以禁用全局的警告。
答案 3 :(得分:0)
当你让编译器产生警告或错误时,如果某些变量仍未使用。使用这样的定义,如果检查了这种情况,你可以插入一个“no-op”来消除这些警告/错误。
例如:
void foo()
{
int x=0;
UNUSED(x); // don't warn me that x is not actually being used
}