nella seguente funzioneChe cos'è un'istruzione di parametro cast in C?
int f (some_struct* p)
{
(void) p;
/* something else */
return 0;
}
che cosa fa la dichiarazione
(void) p;
significa?
nella seguente funzioneChe cos'è un'istruzione di parametro cast in C?
int f (some_struct* p)
{
(void) p;
/* something else */
return 0;
}
che cosa fa la dichiarazione
(void) p;
significa?
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++.
"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”.
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;
Il void
dice al compilatore o lasci residui non dare l'allarme . Se c'è una variabile mai usata, il compilatore o il lint suggeriranno di eliminarlo.
Se non si desidera eliminarlo, è possibile utilizzare void. Come il collegamento: How can I hide "defined but not used" warnings in GCC?
significa "vuoto" è l'unico tipo può essere messo lì? – user693986
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). –