2012-08-05 25 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

相關問題