Un estratto dagli standard linguistici può migliorare tutto!
C99, 6.7.5.3/10:
Il caso particolare di un parametro senza nome di tipo void come l'unico elemento nella lista speci ca fi che la funzione non ha parametri.
C++, 8.3.5/2:
Se la clausola-dichiarazione-parametro è vuota, la funzione non accetta argomenti. L'elenco dei parametri (void) è equivalente alla lista dei parametri vuota.
La differenza è evidente. C ha il void
in questione come parametro senza nome di tipo void
e C++ ha l'identificatore void
. Il primo può essere typedef
-ed, quest'ultimo non può.
Potrebbe essere interessante riflettere sui motivi di ciò. In realtà, il seguente è legale in C++, ma illegale in C:
void fn(int){
}
come C++ ha il concetto di parametri (anonimo) Senza nome in definizioni di funzioni, non mentre C fa ... Quasi.
In realtà, un parametro senza nome può essere presente in una definizione di funzione C: una di tipo void
.
Che sicuramente non ha molto senso poiché non può esserci alcun parametro con questo tipo.
Oltre a non avere molto senso, questa definizione di void
nell'elenco parametri potrebbe rovinare i parametri senza nome di C++, in quanto non sarebbe diverso da loro. La definizione potrebbe essere stata modificata per renderlo un caso speciale molto-molto-vero di un parametro senza nome che non ha parametri corrispondenti corrispondenti e non può essere utilizzato con altri parametri con nome o senza nome e non è in realtà un parametro e ...
Ma immagino che invece di cercare di esprimere qualcosa di così folle, il comitato del C++ ha semplicemente deciso di abbandonare completamente la sezione "unnamed-void-type-parameter" e andare con la "lista dei parametri speciali". Dico buona liberazione.
E lo standard C? Probabilmente mantiene il suo strano 6.7.5.3/10 per motivi di compatibilità con le versioni precedenti ...
È ben spiegato qui http://programmers.stackexchange.com/questions/130679/typedefs-and-defines – Morb
@Morb: ciò spiega perché di solito preferisci un 'typedef' ma, per quanto posso vedere, non spiega perché non puoi in questo caso particolare. –
Non vedo come questa domanda né la risposta accettata stiano dicendo qualcosa di diverso rispetto alla domanda precedente ... Quindi l'ho contrassegnato come un duplicato. – Nemo