代码中看到C程序里用到了这样的语句:
#define UNREFERENCED_PARAMETER(x) do { x = x; } while(0)
int Function(void *arg)
{
UNREFERENCED_PARAMETER(arg);
... /*arg参数在本函数中从未被使用*/
}
将上段代码宏展开后:
int Function(void *arg)
{
arg = arg;
...
}
查阅资料才发现,这样做的好处是避免了编译器关于未引用参数的警告。实际上这条语句不做任何事情,编译器不会为之产生任何代码,所以在空间和性能上不会有任何损失。
那为什么不直接删了未使用的参数呢?
有一种情况:此函数的被调用是通过函数指针来回调的,调用者已经写好了函数指针接口。这时候这个参数就不能删掉,为了屏蔽编译器的警告,故加上这个宏。
另外,这个宏还有另一种形式:
#define UNREFERENCED_PARAMETER(x) (x)