Définitions de types

Il arrive que l’on utilise des types un peu complexes en C++. Par exemple l’écriture :

unsigned long *p[3][5];

est assez peu claire, et de surcroît assez longue à écrire. Voici comment on peut éclaircir cet embrouillamini :

typedef unsigned long ulong;
 typedef ulong* ulongptr;
ulongptr p[3][5];

On a défini deux nouveaux types, ulong identique à unsigned long et ulongptr identique à ulong*. La déclaration de p met alors en relief le fait qu’il s’agit d’un tableau de pointeurs, et non d’un pointeur sur un tableau comme la première écriture pouvait donner à croire. Dans tout le reste du programme, on pourra écrire partout ulong à la place de unsigned long, ce qui est bien agréable.

Les clauses typedef sont donc essentiellement des raccourcis d’écriture, mais qui aident beaucoup à lire les programmes. Elles permettent d’éviter de nombreuses erreurs.

En outre, la définition de types permet de mettre en valeur certaines variables, du point de vue fonctionnel. Par exemple, les arguments entiers des fonctions malloc, realloc, etc., sont du type size_t défini ainsi :

typedef unsigned size_t;

ce qui signifie que size_t est équivalent à unsigned int, mais permet de mettre en valeur ces arguments en montrant qu’ils désignent une taille mémoire, et non quelque chose d’autre.

Les définitions de types sont aussi spécialement utiles avec les pointeurs de fonction (voir chapitre 5).

Il ne faut pas exagérer non plus : un nombre trop élevé de déclarations de types, surtout avec des noms mal choisis, finirait par nuire à la lisibilité, ce qui est le contraire du but recherché.

Précédent Précédent Sommaire Sommaire Suivant Suivant