In C, void
è usato per più cose non correlate. A seconda di cosa viene utilizzato, il suo significato può essere un tipo di unità, un tipo vuoto o qualcos'altro.
Quando void
viene usato da solo (al contrario di void*
un puntatore a vuoto), è un tipo di unità, cioè un tipo con un singolo valore. void
Si dice che le funzioni che restituiscono "non restituiscono nulla", ma ciò che significa in realtà è che non restituiscono alcuna informazione. Restituiscono bit di informazioni, il che significa che restituiscono un valore di un tipo che contiene valori distinti, ovvero un tipo di unità.2 0 = 1020=1
Questo non è un tipo vuoto: una funzione che restituisce un tipo vuoto non può restituire un valore, poiché non esiste un valore di quel tipo. Una funzione il cui tipo di ritorno è vuoto può solo essere ripetuta in loop per sempre, oppure interrompere il programma o sollevare un'eccezione ( longjmp
) (o altrimenti organizzare il non ritorno, ad esempio trasferendo il controllo su un altro thread o processo utilizzando funzionalità oltre lo standard C). Per confondere le cose, è convenzionale in C usare void
al posto di un tipo vuoto (C non ha un tipo vuoto).
Il void
tipo richiede bit di memoria. Poiché C insiste su ogni oggetto che occupa un numero intero, diverso da zero di byte di memoria, è vietato creare un oggetto di tipo e c'è una sintassi speciale per restituire il valore ( un'istruzione con il valore omesso). Non c'è sintassi che dia il valore di tipo , ma quel valore è presente ogni volta che una funzione il cui tipo di ritorno è restituito.0void
void
return
void
void
C non ha un tipo di fondo nel senso di consentire qualsiasi tipo possibile. Anche i tipi incompleti specificano la natura generale dei suoi valori, ad esempio puntatori o strutture o unioni o funzioni. Ma void*
è un puntatore a qualsiasi tipo di non funzione: è il minimo elemento dell'algebra dei tipi di puntatore oggetto, ovvero è il tipo di puntatore oggetto in basso. A differenza del caso generale in T*
cui T
esiste un tipo non vuoto, void*
non è il tipo di puntatori a un valore di tipo void
, ma il tipo di puntatori a un valore di tipo non specificato.