这定义了什么?

时间:2012-02-28 10:55:09

标签: c++

这定义了什么,我将如何使用它?

#define UNUSED(VAR) (void)&(VAR)

它需要在任何地方定义吗?这是在标题中。

编辑 - 我真的不明白这里发生了什么。这是一个宏观的演员无效吗?这不是否定变量?

4 个答案:

答案 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
}