2013-08-30 12 views

Odpowiedz

12

Instrukcja nie wykonuje żadnych czynności w czasie wykonywania i nie powoduje wygenerowania kodu maszyny.

Wyklucza ostrzeżenie kompilatora, że ​​p nie jest używane w treści tej funkcji. Jest to przenośny i bezpieczny sposób na powstrzymanie tego ostrzeżenia dla wielu różnych kompilatorów, w tym GCC, Clang i Visual C++.

+0

Czy oznacza to, że "void" jest jedynym typem, który można tam umieścić? – user693986

+1

Jeśli wstawisz tam inny typ, niektóre kompilatory wygenerują ostrzeżenie "bez użycia efektu".Jeśli umieścisz 'void' w tym miejscu, komunikujesz zarówno kompilator, jak i ludziom, czytając kod, o którym wiesz, że instrukcja nie ma żadnego skutku, i masz się z tym dobrze. Ponadto każdy typ może być rzutowany na 'void' w C (w C++ historia jest inna). –

2

"Obsada do void" jest idiomem języka C, który, zgodnie z konwencją, pomija kompilator i ostrzeżenia o nieużywanych zmiennych lub zwracanych wartościach.

W tym przypadku, jak słusznie zauważa Dietrich Epp, informuje kompilator, że wiesz, że nie używasz argumentu p, i nie daje ci ostrzeżeń o "nieużywanym argumencie".

Drugi wykorzystanie tego idiomu, rzucając wartości zwracanej przez funkcję do void, jest tradycyjnym sposobem mówienia lint lub, co ważniejsze, inni programiści, które którą podjął świadomą decyzję, aby nie niepokoić sprawdzanie wartości zwracanej funkcji. Na przykład:

(void)printf("foo") 

Co oznacza „wiem printf() zwraca wartość, a ja naprawdę powinien to sprawdzić, ale zdecydowaliśmy się nie przeszkadza”.

0

Służy do uniknięcia ostrzeżenia o nieużywanym parametrze funkcji. Po prostu zostaje odrzucony, nie robi nic poza tym, że wyrażenie ma efekt uboczny.

C11 §6.3.2.2 void

Wartość (nieistniejący) o void wyrażenia (wyrażenie, które ma typ void) nie stosuje się w żaden sposób, a bezpośrednia lub pośrednia konwersje (z wyjątkiem nieważności) nie będą stosowane do takiego wyrażenia. Jeśli wyrażenie dowolnego innego typu zostanie ocenione jako wyrażenie pustki , jego wartość lub oznaczenie zostaną odrzucone. (A. Void wyrażenie jest oceniany pod kątem jego skutków ubocznych)

Innym sposobem na uniknięcie ostrzeżenie niewykorzystanych parametrem funkcji jest następująca:

p = p;