2013-08-30 9 views

risposta

12

L'istruzione non esegue nulla in fase di esecuzione e non produce alcun codice macchina.

Sopprime un compilatore che avvisa che p non è utilizzato nel corpo della funzione. Questo è un modo portatile e sicuro per sopprimere questo avvertimento su una varietà di diversi compilatori, inclusi GCC, Clang e Visual C++.

+0

significa "vuoto" è l'unico tipo può essere messo lì? – user693986

+1

Se si inserisce un tipo diverso, alcuni compilatori genereranno un avviso "istruzione senza effetto".Se mettete "void" lì, state comunicando sia al compilatore che agli umani leggendo il codice che sapete che l'affermazione non ha alcun effetto, e voi siete d'accordo. Inoltre, qualsiasi tipo può essere lanciato su 'void' in C (in C++, la storia è diversa). –

2

"Cast to void" è un linguaggio C che, per convenzione, sopprime il compilatore e gli avvisi lint sulle variabili non utilizzate o sui valori restituiti.

In questo caso, come fa correttamente notare Dietrich Epp, dice al compilatore che si sa che non si sta usando l'argomento p, e non per darvi avvertimenti "argomento inutilizzato" su di esso.

L'altro uso di questo idioma, che restituisce il valore di ritorno di una funzione a void, è il modo tradizionale di dire a lint o, più importante, ad altri programmatori che si sono presi la decisione consapevole di non preoccuparsi di controllare il valore restituito di una funzione. Per esempio:

(void)printf("foo") 

significherebbe “So printf() restituisce un valore, e io in realtà dovrebbe controllare, ma ho deciso di non disturbare”.

0

Viene utilizzato per evitare l'avviso di parametri di funzione non utilizzati. Viene semplicemente scartato, non fa altro che l'espressione ha un effetto collaterale.

C11 §6.3.2.2 vuoto

Il valore (inesistente) di un'espressione vuoto (un'espressione che contiene tipo void) non deve essere utilizzato in alcun modo, e conversioni implicite o esplicite (tranne che per annullare) non deve essere applicato a tale espressione. Se un'espressione di un altro tipo viene valutata come espressione void , il suo valore o designatore viene scartato. (. Un'espressione vuoto viene valutata per i suoi effetti collaterali)

Un altro modo per evitare l'avviso di parametro di funzione non utilizzata è:

p = p;