以下代码是做什么的?

6
static void llist_dtor(void *user, void *element)
{
  (void)user;
  (void)element;
  /* Do nothing */
}

这是一个无操作函数吗?那么为什么需要进行类型转换?将NULL作为其参数之一可以吗?

4个回答

15

这确实是一个空操作。将参数转换为 (void) 是为了避免一些编译器出现“参数从未使用”的警告(虽然转换被优化掉了,但参数仍然被视为“已使用”)。

你可以传递 NULL,因为这些参数都会被忽略。


4

是的,这是一个无操作函数。

强制类型转换是一种常见的技巧,用于防止编译器抱怨未使用的参数。


3
是的,这是一个无操作函数,void转换行被放置在那里以避免“未使用参数”的警告。对于gcc,请在页面中搜索“unused”:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html 然而,如果这是C++而不是C,我可能会稍微不同地编写它。
static void llist_dtor( void * /* user */, void * /* element */ )
{
  /* Do nothing */
}

请注意变量名已被注释。

1
-1,gcc 不会编译没有参数名的 C 代码(但对于 C++ 可以)。 - nobody
@Andrew Medico:+1:感谢您纠正我。大多数情况下我都在用C++,并且我在那里做过几次...从未想过在C中可能会有所不同。 - Arun

0

那不是无操作。这样告诉编译器忽略这两个参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接