#define VRAI 1 #define FAUX 0 typedef int BOOLEAN;On pourra par la suite déclarer des << booléens >> de la manière suivante :
BOOLEAN b1,b2;et les utiliser :
b1 = VRAI; if (b2 == FAUX) ...mais bien entendu, ce sera à la charge du programmeur d'assurer que les variables b1 et b2 ne prennent comme valeurs que VRAI ou FAUX. Le compilateur ne protestera pas si on écrit :
b1 = 10;On voit que la lisibilité du programme aura été augmentée, dans la mesure où le programmeur aura pu expliciter une restriction sémantique apportée au type int.
Lorsqu'on donne un nom à un type structure par typedef, l'utilisation est beaucoup plus aisée. En effet, si on déclare :
struct personne { ... }les déclarations de variables se feront par :
struct personne p1,p2;alors que si on déclare :
typedef struct { ... } PERSONNE;les déclarations de variables se feront par :
PERSONNE p1,p2;on voit que la seconde méthode permet d'éviter d'avoir à répéter struct.
De la même manière, en ce qui concerne les pointeurs, il est plus difficile d'écrire et de comprendre :
struct personne { ... }; struct personne *p1,*p2; /* p1 et p2 pointeurs vers des struct */que la version suivante qui donne un nom parlant au type pointeur vers struct :
typedef struct { ... } PERSONNE; typedef PERSONNE *P_PERSONNE; /* P_PERSONNE type pointeur vers struct */ P_PERSONNE p1,p2; /* p1 et p2 pointeurs vers des struct */