C'est plus sûr parce que vous n'avez pas à mentionner le nom du type deux fois et que vous n'avez pas à construire l'orthographe correcte pour la version "déréférencée" du type. Par exemple, vous n'avez pas à "compter les étoiles" en
int *****p = malloc(100 * sizeof *p);
Comparez cela à la méthode basée sur les types sizeof
sur
int *****p = malloc(100 * sizeof(int ****));
où vous devez vous assurer que vous avez utilisé le bon nombre de *
sous sizeof
.
Pour passer à un autre type, il suffit de changer un seul endroit (la déclaration de l'option p
) au lieu de deux. Et les personnes qui ont l'habitude de jeter le résultat de malloc
doivent changer trois places.
De manière plus générale, il est très judicieux de respecter la directive suivante : les noms de types doivent figurer dans les déclarations et nulle part ailleurs. Les déclarations proprement dites doivent être indépendantes des types. Elles doivent éviter autant que possible de mentionner des noms de types ou d'utiliser d'autres caractéristiques spécifiques aux types.
Cette dernière signifie : Évitez les moulages inutiles. Évitez la syntaxe inutile des constantes spécifiques au type (comme 0.0
ou 0L
où un simple 0
suffirait). Évitez de mentionner les noms de type sous sizeof
. Et ainsi de suite.