2013-11-15 211 views
3

這個宏是什麼意思?我只是在源文件中找到以下宏:這個宏是什麼意思? #define UNUSED(x)((x)=(x))

#define UNUSED(x) ((x)=(x)) 
+4

用一些ascii-art來改善預處理器輸出嗎? ;-) – alk

+5

哦,哇,這是實施'(void)x'來避免未使用的變量警告的錯誤方法。使用賦值有副作用,所以這個定義並不意味着它在錫上所說的內容。 – kfsone

+3

除了@kfsone指出的之外,'x'可能根本沒有可訪問的賦值運算符。使用'#define UNUSED(x)(void)x'代替。 – dkrikun

回答

7

這可能是爲了抑制未使用的變量/參數對函數的編譯器警告。你也可以使用此:

// C++ only 
void some_func(int /*x*/) 

或者

// C and C++ 
void some_func(int x) 
{ 
    (void)x; 
} 

或者您的編譯器可能支持一個標誌,這樣做,但這些都是便攜,不會跳過無效的警告。

+0

您只能在C++中使用匿名參數;它們在C中是不允許的。(這個問題用C和C++標記,所以你沒有錯,但是你沒有對你的建議給出一個重要的警告。) –

+1

@JonathanLeffler:用C和C++標記問題應該被禁止......雖然好點,但我會說清楚。 –

+0

@EdS。它應該被允許 - 但只有當用戶正確解決關於C和C++之間差異的測驗時。 –

3

用它來擺脫引用未使用變量的任何編譯器警告。

1

它使抱怨未使用變量的編譯器無聲。

其他的方式來做到這一點:

  • 完全刪除該變量:void foo(int)
  • 出評論的變量:void foo(int /* value */)
  • 使用該宏:void foo(int value){ UNUSED(value); }
1

一些編譯器發出警告關於未使用的變量 - 已定義但從未引用的變量。有時你只有在某些條件ifdefs下(僅在某些平臺上或僅在調試中)引用變量的代碼,並且在定義該變量的位置複製這些條件是不方便的。像這樣的宏可以用來在這種情況下抑制未使用的變量警告。

相關問題