这个定义是做什么的,我将如何使用它?这个定义是做什么的?
#define UNUSED(VAR) (void)&(VAR)
是否需要在任何地方定义?这是在标题。
编辑 - 我真的不明白这里发生了什么。这是一个宏观失败吗?这不否定变量?
这个定义是做什么的,我将如何使用它?这个定义是做什么的?
#define UNUSED(VAR) (void)&(VAR)
是否需要在任何地方定义?这是在标题。
编辑 - 我真的不明白这里发生了什么。这是一个宏观失败吗?这不否定变量?
其目的是防止自己得到关于未使用参数的编译器警告。
更好的方法是让它匿名,例如,
void do_stuff(int x, int);
第二个参数在这种情况下未使用。它可能需要在那里出于某种超载目的。
关于使用它作为局部变量 - 你必须问自己,为什么声明一个局部变量然后不使用它?
那么答案可能是你在代码中使用预处理器,这样一个变量有时会被使用,但并不总是如此。然而,预先处理它的存在并不总是切实可行的。
如果你真的使用它,你声明一个变量未使用的事实并不会使它成为一个错误。
将其匿名保存有两个问题。首先,只有在没有代码路径或有条件编译的块使用变量时才有效。如果有的话,匿名将导致那些失败。其次,让它匿名会使代码更加难以查看,因为它使得很难判断哪些变量需要确定是否需要在代码中安全地忽略它。 – 2012-02-28 11:25:43
这是一个宏,可以用来停止编译器抱怨/警告有关被删除但未引用的变量。通过编译器#pragma设置来实现同样的结果以通过全局禁用此类警告是很常见的。
这是为了当你有你编译器产生警告或错误,如果一些变量保持未使用。使用这样的定义,如果您检查了这种情况,您可以插入一个“禁止操作”来使这些警告/错误无效。
例如:
void foo()
{
int x=0;
UNUSED(x); // don't warn me that x is not actually being used
}
它的存在,以避免未使用的参数和变量的警告。只需铸造到void
就足够了:它使用变量,而铸造通常什么都不做。我只能猜到&
运算符在这里用了什么。也许是到prevent a conversion operator from being called。但是,它不prevent an overloaded operator&
from being called。或者它可以确保它仅用于变量,但这并不完美:it can be used on expressions that produce references.
是的,它是一个转换为“void”的宏。 “否定变量”是什么意思? – 2012-02-28 11:27:29
错误的词,我的意思是让它为空..我猜。如果它是一个int,铸造无效会做什么? – SirYakalot 2012-02-28 14:37:05
它什么都不做。这就是它在这里使用的原因。这是一种明确的说法,“对这个变量不做任何事情”。 – 2012-02-28 22:41:34