2013-08-30 18 views

回答

12

該聲明在運行時不做任何事情,並且不產生機器代碼。

它抑制了編譯器警告,p在函數的主體中未被使用。這是一種便攜式和安全的方法,可以通過各種不同的編譯器(包括GCC,Clang和Visual C++)來抑制此警告。

+0

這是否意味着「無效」是唯一可以放在那裏的類型? – user693986

+1

如果您在其中輸入了不同的類型,則某些編譯器將生成「無效的語句」警告。如果你在那裏放置了'void',那麼你正在向編譯器和讀取代碼的人傳達你知道這個語句沒有任何作用,並且你沒問題。此外,任何類型都可以在C中轉換爲「void」(在C++中,故事是不同的)。 –

2

「轉換爲void」是一種C語言習慣用法,它按照慣例禁止編譯器和關於未使用變量或返回值的警告。

在這種情況下,正如Dietrich Epp正確指出的那樣,它告訴編譯器,您知道您沒有使用參數p,而不是給您「關於它的未使用參數」的警告。

該成語的其他用法將函數的返回值轉換爲void是傳統的告訴lint的方法,或者更重要的是,其他程序員認爲您有意識地決定不檢查返回值的功能。例如:

(void)printf("foo") 

將意味着「我知道printf()返回一個值,和我真的應該檢查它,但我已經決定不打擾」。

0

它用於避免未使用的函數參數的警告。它只是被丟棄,除了表達有副作用之外什麼也不做。

C11§6.3.2.2空隙

void表達式(具有空隙型的表達)的(不存在的)值不應 以任何方式被使用,並且隱式或顯式轉換(除非無效)不得用 適用於這樣的表達。 如果任何其他類型的表達式被評估爲void 表達式,則其值或指示符將被丟棄。 (void表達式被評價其 副作用)

的另一種方式,以避免未使用的功能參數的警告是:

p = p;