2012-02-28 87 views
0

這個定義是做什麼的,我將如何使用它?這個定義是做什麼的?

#define UNUSED(VAR) (void)&(VAR) 

是否需要在任何地方定義?這是在標題。

編輯 - 我真的不明白這裏發生了什麼。這是一個宏觀失敗嗎?這不否定變量?

+0

是的,它是一個轉換爲「void」的宏。 「否定變量」是什麼意思? – 2012-02-28 11:27:29

+0

錯誤的詞,我的意思是讓它爲空..我猜。如果它是一個int,鑄造無效會做什麼? – SirYakalot 2012-02-28 14:37:05

+0

它什麼都不做。這就是它在這裏使用的原因。這是一種明確的說法,「對這個變量不做任何事情」。 – 2012-02-28 22:41:34

回答

1

其目的是防止自己得到關於未使用參數的編譯器警告。

更好的方法是讓它匿名,例如,

void do_stuff(int x, int); 

第二個參數在這種情況下未使用。它可能需要在那裏出於某種超載目的。

關於使用它作爲局部變量 - 你必須問自己,爲什麼聲明一個局部變量然後不使用它?

那麼答案可能是你在代碼中使用預處理器,這樣一個變量有時會被使用,但並不總是如此。然而,預先處理它的存在並不總是切實可行的。

如果你真的使用它,你聲明一個變量未使用的事實並不會使它成爲一個錯誤。

+0

將其匿名保存有兩個問題。首先,只有在沒有代碼路徑或有條件編譯的塊使用變量時纔有效。如果有的話,匿名將導致那些失敗。其次,讓它匿名會使代碼更加難以查看,因爲它使得很難判斷哪些變量需要確定是否需要在代碼中安全地忽略它。 – 2012-02-28 11:25:43

0

這是一個宏,可以用來停止編譯器抱怨/警告有關被刪除但未引用的變量。通過編譯器#pragma設置來實現同樣的結果以通過全局禁用此類警告是很常見的。

0

這是爲了當你有你編譯器產生警告或錯誤,如果一些變量保持未使用。使用這樣的定義,如果您檢查了這種情況,您可以插入一個「禁止操作」來使這些警告/錯誤無效。

例如:

void foo() 
{ 
    int x=0; 
    UNUSED(x); // don't warn me that x is not actually being used 
}