Non; vous n'avez pas jeté le résultat, puisque:
- Il est inutile, comme
void *
est automatiquement et en toute sécurité promu à tout autre type de pointeur dans ce cas.
- Il peut se cacher une erreur, si vous avez oublié d'inclure
<stdlib.h>
. Cela peut provoquer des plantages, dans le pire des cas.
- Il ajoute encombrer le code, les distributions ne sont pas très facile à lire (surtout si le pointeur est de type long).
- Il fait de vous répéter vous-même, ce qui est généralement mauvais.
Une clarification, notez que j'ai dit "vous ne jette pas", pas "vous n'avez pas besoin de casting". À mon avis, c'est un échec pour inclure le casting, même si vous l'avez droit. Il y a tout simplement aucun avantage à le faire, mais un tas de risques potentiels, et notamment la distribution indique que vous ne savez pas sur les risques.
Notez également, que les commentateurs soulignent que les changements ci-dessus pour les droites C, pas du C++. Je crois fermement dans le C et le C++ comme des langues distinctes.
Pour ajouter d'autres, votre code inutilement répète les informations de type (int
), ce qui peut provoquer des erreurs. Il est préférable de déréférencer le pointeur utilisé pour stocker la valeur de retour, pour "verrouiller" les deux ensemble:
int *sieve = malloc(length * sizeof *sieve);
Cela déplace aussi l' length
à l'avant pour une meilleure visibilité, et les gouttes de la redondants entre parenthèses avec sizeof
; ils ne sont nécessaires que lorsque l'argument est un nom de type. Beaucoup de gens semblent ne pas savoir (ou ignorer) ce qui rend leur code plus détaillé. Rappelez-vous: sizeof
n'est pas une fonction! :)