2010-10-21 102 views
5
static void llist_dtor(void *user, void *element) 
{ 
    (void)user; 
    (void)element; 
    /* Do nothing */ 
} 

它是无操作功能吗?那么为什么要完成演员?作为其参数之一传递NULL可以吗?下面的代码是做什么的?

回答

4

是的,这是一个无操作功能。

铸造是防止编译器抱怨未使用的参数的常用技巧。

14

这确实是一个没有操作。对(void)进行强制转换是为了避免在某些编译器中获得“参数未使用”警告(转换优化了,但参数仍被视为“已使用”)。

您可以通过NULL,因为参数无论如何都会被忽略。

0

这不是没有操作。就像那样,你告诉编译器忽略这两个参数。

3

是的,这是一个无操作功能,void铸造线放置以避免“未使用的参数”警告。对于海湾合作委员会,在网页搜索“未使用”: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++)。 – 2010-10-22 20:27:21

+0

@Andrew Medico:+1:谢谢你纠正我。大多数情况下,我使用C++并在那里完成了这几次......从来没有想过在C中可能会有所不同。 – Arun 2010-10-22 21:32:03