Dernière mise à jour :2008-10-14

informatique

typedef ou enum

En langage C comme dans plusieurs autres, toute donnée appartient à un type. Toute les variables utilisées dans un programme est associée à un type précis. Le langage C comporte plusieurs types de données prédéfinis comme par exemple le type pointer qui sert à stocker une adresse mémoire ou encore le type int qui permet de loger des valeur entières.

Le langage C offre aussi des possibilité plus avancé vous permettant de définir vos propre types de données en utilisant les termes typedef ou enum.

typedef:

typedef ne permet pas réellement, contrairement à enum, de définir un nouveau type de donnée. Il permet plutot de rebatiser un type de donnée déjà existant. Cette procédure peut s'avérer fort utile dans le cas de programme qui vous demande de définir plusieurs variables qui sont associées à des types de données aux nombres de caractères interminable. La syntaxe d'utilisation de typedef est la suivante:

typedef , ...

Les 2 exemples ci-dessous montre des définitions de variables avec et sans l'utilisation de typedef

Listing 1.0 Sans typedef:
1. struc treslongnomdetypededonnees x;
2. struc treslongnomdetypededonnees y;
3. struc treslongnomdetypededonnees z;
Listing 1.1 Avec typedef:
1. typedef struc treslongnomdetypededonnees tlndtdd;
2. tlndtdd x;
3. tlndtdd y;
4. tlndtdd z;

Dans le cas de structures, on peut définir un synonime dès la déclaration de la structure comme le montre le listing ci-dessous:

Listing 1.2 Déclaration de struct avec typedef
1. typedef struct treslongnomdetypededonnees
2. {
3.   int intUn;
4.   int intDeux;
5. }tlndtdd;

Lors de la compilation, le compilateur retransformera tous les synonimes de type de données en leur type d'origine.

enum:

Quelquefois, il arrive dans un programme qu'une variable ne peuvent contenir qu'un nombre de valeur fini inférieur au nombre de valeur maximal du type de donnée. Comme par exemple, si vous désirez une variable est voué à contenir un chiffre entre 1 et 7 pour représenter le jour de la semaine. Il est aussi parfois intéressant et plus représentatif de pouvoir donner une valeur textuel plutot que numérique. En reprenant l'exemple des jours de la semaine, le chiffre 1 serait beaucoup plus explicatif si il était en fait 'dimanche'.

C'est ce à quoi servent les types énumératifs que l'on peut créer à l'aide de enum. En voici un exemple:

Listing 2.0 Utilisation de l'instruction enum
1. enum jour_de_la_semaine
2. {
3.   dimanche,
4.   lundi,
5.   mardi,
6.   mercredi,
7.   jeudi,
8.   vendredi,
9.   samedi
10. };
11. enum jour_de_la_semaine jdls;

La variable jdls créé dans l'exemple ci-dessus est de type enum jour_de_la_semaine et peut prendre l'une des valeurs nommée dans l'énumération.

Les valeurs d'un type énuméré sont interprétés comme des valeurs entières par le compilateur. Dans l'exemple ci-haut, dimanche aura la valeur 0, lundi, la valeur 1 etc.. Si il est nécessaire de débuter les valeurs numériques à un nombre plus élevé, ont peut procéder de la façon suivante:

Listing 2.1 Utilisation de l'instruction enum
1. enum jour_de_la_semaine
2. {
3.   dimanche=50,
4.   lundi,
5.   mardi,
6.   mercredi,
7.   jeudi,
8.   vendredi,
9.   samedi
10. };
11. enum jour_de_la_semaine jdls;

Dans ce cas, dimanche aura la valeur 50 et chacun des éléments suivant celui-ci aura une la valeur de sont prédécesseur augmentée de 1. Il est aussi possible d'assigner la même valeur numérique à plusieurs éléments de la liste. Il suffit de leur affecter la même valeur. En reprennant l'exemple ci-dessus, voici ce que ca pourrait donner:

Listing 2.1 Utilisation de l'instruction enum
1. enum jour_de_la_semaine
2. {
3.   dimanche=50,
4.   lundi=50,
5.   mardi=50,
6.   mercredi,
7.   jeudi,
8.   vendredi,
9.   samedi
10. };
11. enum jour_de_la_semaine jdls;

Dimanche, lundi et mardi auront la valeur 50 et selon la règle, les autres éléments seront respectivement incrémenté de 1. Dans l'exemple, les 4 dernier éléments auraient donc les valeurs 51, 52, 53 et 54.

Auteur : Sylvain Bilodeau

Date de mise en ligne : 2002-08-20 01:00:00

Aucun commentaire pour l'instant.