Caster le retour de malloc?

Bonjour,

J’aimerais savoir est-ce que je dois caster le résultat de malloc? C’est-à-dire que je devrais faire ceci :

int *v = malloc(sizeof(*v) * length);

plutôt que :

int *v = (int *) malloc(sizeof(*v) * length);
1 « J'aime »

En C, vous n’avez pas besoin de caster la valeur de retour de malloc. Le pointeur vers void retourné par malloc est automatiquement converti dans le type correct. Cependant, si vous voulez que votre code compile avec un compilateur C++, un cast est nécessaire. Une alternative préférée est d’utiliser le code suivant:

int *v = malloc(length * sizeof(*v));

Ce qui vous évite en plus le problème de devoir changer le côté droit de l’expression si jamais vous changez le type de v.

En C, vous pouvez implicitement convertir un pointeur void en tout autre type de pointeur, de sorte qu’un cast n’est pas nécessaire. L’utilisation d’un cast peut suggérer à quelqu’un d’autre qu’il y a une raison pour laquelle un cast est nécessaire, ce qui peut être trompeur.

Il n’est pas nécessaire de caster les résultats de malloc, puisqu’il renvoie void* , et qu’un void* peut pointer vers n’importe quel type de données.

Un pointeur void est un pointeur générique et le C prend en charge la conversion implicite d’un type de pointeur void vers d’autres types, il n’est donc pas nécessaire de procéder à un cast explicite.

Toutefois, si vous voulez que le même code fonctionne de manière parfaitement compatible sur une plate-forme comme C++, qui ne prend pas en charge la conversion implicite, vous devez effectuer le cast, donc tout dépend de l’utilisation.