issu de la FAQ du groupe usenet fr.comp.lang.c :
12.1 Doit-on ou ne doit-on pas caster malloc() ?
Cette question est probablement celle qui revient le plus souvent
dans la discussion. Et à chaque fois, elle engendre une longue
discussion.
Certains intervenants pensent que caster la valeur de retour
de malloc() est inutile, voire dangereux.
En effet, malloc() renvoie un void *.
Or, en C, un pointeur void * est implicitement casté
lors d’une affectation vers le type de la variable affectée.
Bien sûr, expliciter le cast n’est pas interdit, et est parfois
utile.
Toutefois, caster le retour de malloc()
risque de cacher au compilateur l’oubli du prototype de
malloc().
Ce prototype se trouve dans le fichier d’en-tête <stdlib.h>.
Sans lui, malloc() sera par défaut une fonction
retournant un int et dont les paramètres seront du type
des arguments passés, ce qui peut provoquer de sérieux bugs.
La véritable erreur est l’oubli du fichier d’en-tête
<stdlib.h>, et non pas le cast de malloc() en
lui même.
Mais le cast de malloc() risque de cacher au compilateur
cette erreur.
À noter qu’il existe des outils de vérification de code et des
options sur la plupart des compilateurs [4] qui permettent de détecter ce genre d’erreur.
D’autres intervenants jugent qu’il faille tout de même caster le
retour de malloc(), afin de conserver une compatibilité
avec d’anciens compilateurs pré-ANSI, ou pour intégrer plus
facilement le code avec C++.
Evidemment, les programmeurs avertis sauront dans quelles
situations il est utile ou non de caster les void *
j’espère avoir éclairé ta lanterne…