18.1.3 Utilisation de typedef pour définir un type structuré

Icône de l'outil pédagogique Utilisation de typedef pour définir un type structuré

L'utilisation la plus fréquente de typedef concerne les structures et permet d'éviter l'écriture un peu lourde struct toto. On a déjà vu en détail comment employer typedef pour les types structurés dans le chapitre "Structures". Ce qui suit n'est qu'un résumé qui n'apporte rien de plus.

Prenons l'exemple d'une structure permettant de décrire une courbe caractérisée par son nom, son nombre de points et les ordonnées de ses points (les abscisses sont supposées réparties de façon équidistante sur un intervalle donné). On désire donc créer un type structuré T_COURBE avec typedef :

#define MAX_POINTS 10
typedef struct

{
char nom[20] ;
char nb_points ;
double y[MAX_POINTS] ;
} T_COURBE ;

Pour créer des variables structurées de ce nouveau type T_COURBE, il suffit d'écrire :

T_COURBE parabole ;
T_COURBE sinus = { "sinusoide", 4, { 1., 0., ‐1., 0. } } ;
T_COURBE* ptr ;

L'écriture T_COURBE n'est plus possible dans le cas d'une structure récursive (c'est‐à‐dire un type structuré dont un des champs est du même type structuré), car le compilateur doit connaître tous les mots qu'il rencontre pendant sa lecture linéaire du fichier à compiler.

Voici un exemple de définition de structure récursive T_INDIVIDU :

typedef struct individu

{
char nom[20] ;
char prenom[20] ;
struct individu * pere ;
struct individu * mere ;
} T_INDIVIDU ;

Ici, le type structuré créé peut être désigné indifféremment par ses deux noms synonymes struct individu ou T_INDIVIDU. La deuxième appelation (plus courte) sera bien sûr toujours préférée, sauf à l'intérieur de la définition du type structuré où le mot T_INDIVIDU n'est pas encore connu du compilateur.

Pour définir des variables structurées de type T_INDIVIDU, il suffit d'écrire :

T_INDIVIDU Claude ;
T_INDIVIDU Jojo = { "Joseph", "Dupuis" } ;