È più sicuro perché non è necessario menzionare il nome del tipo due volte e non è necessario creare l'ortografia corretta per la versione "dereferenziata" del tipo. Ad esempio, non c'è bisogno di "contare le stelle" in
int *****p = malloc(100 * sizeof *p);
Confronti che, per il tipo a base di sizeof
in
int *****p = malloc(100 * sizeof(int ****));
in cui è stato anche assicurarsi che si è utilizzato il giusto numero di *
sotto sizeof
.
Per passare a un altro tipo, è necessario modificare solo un luogo (la dichiarazione di p
) anziché due. E le persone che hanno l'abitudine di trasmettere il risultato di malloc
devono cambiare tre posizioni.
Più in generale, ha molto senso attenersi alla seguente linea guida: i nomi dei tipi appartengono alle dichiarazioni e da nessun'altra parte. Le dichiarazioni effettive dovrebbero essere indipendenti dal tipo. Dovrebbero evitare di menzionare qualsiasi nome di tipo o di utilizzare qualsiasi altra caratteristica specifica del tipo il più possibile.
Quest'ultimo significa: evitare lanci non necessari. Evitare sintassi costante specifica del tipo non necessaria (come 0.0
o 0L
in cui un semplice 0
è sufficiente). Evitare di menzionare i nomi dei tipi sotto sizeof
. E così via.
Cordiali saluti, quando viene utilizzato con una variabile, 'sizeof' non ha bisogno di parentesi:' p = malloc (sizeof * p); ' –
è più leggibile con parentesi –
@TomerArazy: mi permetto di dissentire; non è leggibile con parents. Senza parents, non può essere un typename; la mancanza di parents aiuta il lettore umano a disambiguare. (problema minore: anche, i parenti potrebbero suggerire che sizeof è una funzione, che non lo è) – wildplasser