Dois-je utiliser "typedef struct" ou non ? Quels sont les avantages et les inconvénients ?
C'est juste un style de codage subjectif. Le style le plus courant est d'utiliser un typedef. L'avantage est que cela permet au code de se comporter comme en C++. Le typage struct name
explicite est également acceptable, un style privilégié par Linux. Aucun style n'est manifestement bon ou mauvais.
Cependant, pour les structures auto-référencées, quel que soit le style, vous devez toujours écrire le membre pointeur avec la balise struct
la notation.
typedef struct foo
{
struct foo* next;
} foo_t;
foo_t* next
ne fonctionnera pas car le typage n'est pas complet à ce moment-là. foo
est toutefois une "balise struct", et non un nom de type, et suit donc des règles différentes. Si vous souhaitez utiliser le nom du typedef en interne, vous devez déclarer la structure :
typedef struct foo foo_t; // forward declaration
struct foo
{
foo_t* next;
};
Lorsque j'alloue de la mémoire, certains m'ont dit que calloc est meilleur que malloc car il fait le même travail mais mieux...
Quand quelqu'un vous dit ça, demandez-lui comment exactement calloc
pas mieux. Lors de la programmation, l'esprit critique est très important.
-
malloc
alloue un morceau de mémoire mais ne l'initialise pas à des valeurs connues. Puisqu'il n'y a pas d'initialisation, malloc
est plus rapide que calloc
.
-
calloc
alloue un morceau de mémoire, ou éventuellement un réseau de morceaux placés dans des cellules de mémoire adjacentes. Elle réinitialise toute la mémoire, ce qui signifie qu'elle a des valeurs par défaut connues. De ce fait, elle est plus lente que malloc
.
Alors, qu'est-ce qui est "mieux", plus rapide ou pré-initialisé ? Cela dépend de ce que vous voulez faire.