2012-08-05 68 views
1

我现在读的项目,并找到了一些硬代码的理解,象下面这样:`(void)struct_pointer`的用法是什么?

struct mcachefs_metadata_t* mdata_root; 
... 
mcachefs_metadata_release(mdata_root); 

mcachefs_metadata_release的定义如下:

void 
mcachefs_metadata_release(struct mcachefs_metadata_t* mdata) 
{ 
    (void) mdata; 
    mcachefs_metadata_unlock(); 
} 

mcachefs_metadata_unlock的definitioin是如下:

#define mcachefs_metadata_unlock() mcachefs_mutex_unlock (&mcachefs_metadata_mutex, "metadata", __CONTEXT); 

然后,mcachefs_mutex_unlock功能:

void 
mcachefs_mutex_unlock(struct mcachefs_mutex_t* mutex, const char* name, 
    const char* context) 
{ 
    int res; 
    ... 

    mutex->owner = 0; 
    mutex->context = NULL; 
    res = pthread_mutex_unlock(&(mutex->mutex)); 
    if (res == 0) 
    { 
     return; 
    } 
    ... 
} 

我不明白什么是(void) mdata;意味着在 mcachefs_metadata_release功能。它的用法是什么?

回答

3

这是为了压制unused argument: mdata编译器警告。顺便说一下,不好的做法。

+0

有什么选择? – Christoph 2012-08-05 12:44:39

+0

@Christoph - 编写一个不带参数和/或摆脱全局的新函数。 – Hogan 2012-08-05 12:45:33

+2

@Hogan:这只适用于这种特殊情况 - 有正当的理由可以使用未使用的参数(API设计,通用签名的必要性,例如通过函数指针进行多态性时......) – Christoph 2012-08-05 12:51:33

相关问题