28 votes

sizeof avec un type ou une variable

J'ai récemment vu quelqu'un féliciter un autre utilisateur pour son utilisation de sizeof var au lieu de sizeof(type). J'ai toujours pensé que c'était juste un choix de style. Y a-t-il une différence significative ? A titre d'exemple, les lignes avec f et ff ont été considérées comme meilleures que les lignes avec g et gg :

 typedef struct _foo {} foo;

 foo *f = malloc(count * sizeof f);
 foo *g = malloc(sizeof(foo) * count);

 foo **ff = malloc(count * sizeof *ff);
 foo **gg = malloc(sizeof(foo*) * count);

À mon avis, la première série est juste une question de style. Mais dans la deuxième paire de lignes, le deuxième * supplémentaire peut facilement être confondu avec une multiplication.

0voto

SoapBox Points 14183

Prendre la taille d'une variable peut avoir des résultats inattendus. Lorsque la variable est un tableau, sizeof(array) renvoie la taille du tableau, et non la taille d'un élément individuel ou la taille d'un pointeur. Prendre la taille d'un pointeur retournera la taille d'un pointeur. Mais comme les tableaux sont généralement représentés comme des pointeurs lorsqu'ils sont transmis, les choses peuvent devenir confuses.

0voto

Riga Points 1012

La logique commerciale définit votre choix.

  1. Si votre code fait référence à une variable particulière et que sans cette variable votre code n'a aucun sens - choisissez sizeof(var)

  2. Si votre code traite d'un ensemble de variables avec un type particulier - choisissez sizeof(type) . Vous en avez généralement besoin si vous avez un typedef qui définit de nombreuses variables que vous traitez différemment en fonction de leur type (par exemple, la sérialisation). Il se peut que vous ne sachiez pas lesquelles de ces variables seront conservées dans les futures versions du code, de sorte que le choix du type comme argument est logiquement correct. Même la modification de ces typedef n'affectera pas votre sizeof ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X