[decouverte] enum et typedef enum [Forums - Langage C]
[decouverte] enum et typedef enum [Forums - Langage C]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes





[decouverte] enum et typedef enum
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1943
Hors Ligne
Encore un pense bête pour moi qui découvre les enum et surtout les typedef enum

Les enum permettent de définir des équivalences (un peu comme #define) mais avec 2 avantages :
-il n'y aura jamais 2 valeurs identiques ou 2 fois la même déclaration
-Plus sur
je laisse pour cela la citation de Jacques
Citation :
L'intérêt d'utiliser des énumérations au lieu des #define, c'est qu'avec les énumérations c'est le compilateur qui va travailler alors qu'avec les #define c'est le préprocesseur dont l'usage n'est pas un gage de fiabilité logicielle.

L'utilisation des enum n'est normalement pas très contraignante et elle est recommandée en C++ et obligatoire en C#.
(posté ici http://www.68hc08.net/modules/newbb/v ... t_id=15633#forumpost15633)

enum MonEnum
{
    
Valeur1 5
    
Valeur2 6
    
Valeur3 7,  
    
Valeur4 
};
On n'est même pas obligé de donner des valeurs, valeurs qui ne nous intéressent peut être même pas !

Si ces valeurs peuvent être associé à différentes choses on pourra utiliser les typedef enum
typedef enum MonTypeEnum
{
    
Valeur1 5
    
Valeur2 6
    
Valeur3 7,  
    
Valeur4 
}MonTypeEnum_t;


on pourra ainsi associer ces valeurs à différentes "choses"
MonTypeEnum_t UnTruc ;

Registre UnTruc.Valeur2 ;


freescale/NXP utilise ça pour déclarer les différents valeurs possibles des registres.

Posté le : 21/03/2016 15:21
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1164
Hors Ligne
Salut

J'utilise bcp les typedef enum pour les configurations.
Par exemple
typedef enum
{    
    
CLOCK_DIVIDEBY_1,
    
CLOCK_DIVIDEBY_2,
    
CLOCK_DIVIDEBY_4,
    
CLOCK_DIVIDEBY_8,
    
CLOCK_DIVIDEBY_16,
    
CLOCK_DIVIDEBY_32,
    
CLOCK_DIVIDEBY_64,
    
CLOCK_DIVIDEBY_128
eTPM_PRESCALER;


me permet de lancer une fonction d'init avec des arguments en clair ainsi :
TPMModuleInit (TPM3TPM_BUSRATE_CLOCKCLOCK_DIVIDEBY_4TPM_ENABLE_INTERRUPTDISABLE_CENTER_ALIGNED_PWMRREX_TICK);


Je trouve que cela facilite grandement la lecture du code et les modifications. A la fin je ne sais pas quelle est la valeur des champs, mais je m'en moque. Je me pose la question une fois à la création du champs.

Par ailleurs les enum apparaissent dans le debugger également à ma connaissance dans le champs d'une variable. Donc les données s'affichent 'en clair'

++
Steph

Posté le : 23/03/2016 11:25
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Accro
Inscrit:
06/07/2007 09:17
Messages: 697
Hors Ligne
Plop all^^

Je réouvre ce sujet.

Les enum, c'est tres bien en safe C.
Je l'utilise pour les State Machine.


/* inside h file */
typedef enum
{    
    
STATE_1,
    
STATE_2,
    
STATE_3
eSTATE_MACHINE;


/* inside c file */

/* déclaration et initialisation */
static eSTATE_MACHINE MyState STATE_1;

void Myfunction(void)
{
   switch(
MyState):
   {
      case 
STATE_1:
        break;
      case 
STATE_2:
        break;
      case 
STATE_3:
        break;
      default:
        break;
   }
}


Lorsque l'on utilise un enum sur un switch, nous avons l'obligation de faire correspondre a case à chaque élément de l'enum.

L'autre intérêt de l'enum et d'éviter du jardinage lors de parcourt de table:

/* inside h file */
typedef enum
{    
    
ITEM_1,
    
ITEM_2,
    
ITEM_3,
    
ITEM_NUM
eITEM_LIST;


/* inside c file */

/* déclaration et initialisation */
static char MyArray[ITEM_NUM];

void Myfunction(void)
{
   
eITEM_LIST i;
   
   for (
i=ITEM_1ITEM_NUMi++)
   {
       
MyArray[i] += 1U;
   }
}



Cependant Attention. Une variable de type enum n'aura pas forcement la taille prevue.
Dans mon premier exemple, la variable MyState fait 16 bits.
Ceci est configurable dans les optons du compilo.

Quelqu'un pourrait-il expliquer cette configuration? :)

Posté le : 03/08/2016 09:47
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Oula !

Parole de débutant, va falloir que je potasse sérieusement ce que vous dites là. Car, mes #define font aussi bien le boulot ?!

Posté le : 03/08/2016 10:40
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Accro
Inscrit:
06/07/2007 09:17
Messages: 697
Hors Ligne
imagine un passage de parametre.

/* avec define */
MyFunc(char data); /* ou int ou...*/

/* avec enum */
MyFunc(eEnum data);


avec un enum, le test du paramètre passé est plus facile car l'enum est borné par nature.
avec un enum, tu reduit les risque d'erreur de codage car tu précise un type de donnée.

EDIT: tu peux me tutoyer :p

Posté le : 03/08/2016 11:29
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1943
Hors Ligne
Salut

Ce sont des outils qui rendent le code plus lisible et sûr. En plus avec enum éclipse met du bleu dans le code et j'aime le bleu

C'est un peu comme écrire un code avec 30x la même séquence plutôt que de faire une fonction qui reprend la séquence; Au final ça changera rien parce que le compilateur va optimiser mais la fonction rend le code plus lisible et si modification il y a elle sera 30x identique, pas 28 ou 29fois...


Posté le : 03/08/2016 11:40
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Accro
Inscrit:
06/07/2007 09:17
Messages: 697
Hors Ligne
Plop ^^

typedef enum
{
    
e_DATA1,
    
e_DATA2,
    
e_DATA3,
    
e_DATA_COUNT
}e_MomEnum;


Quelqu'un pourrait-il me dire comment faire pour prouver (ASIL level donc recherche de la preuve ;) ) que mon enum est bien codé sur un unsigned char?

Posté le : 16/08/2016 15:44
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
vu qu'il il y 4 éléments dans ton enum, ça doit être codé sur 4 octets.

Tu peux le mesurer en déclarant une variable du type de l'enum et en calculant sa taille avec l'opérateur sizeof

Posté le : 16/08/2016 16:59
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Accro
Inscrit:
06/07/2007 09:17
Messages: 697
Hors Ligne
Jacques, Je ne suis d'accord.
Par défaut, les enum sont taillés pour recevoir des int, soit 2 octects.

Je sais que certaine(s) option(s) compilo permette(nt) de d'ajuster la taille d'un enum au plus juste...

Je vais faire des check de sizeof et je vous fait un retour ;).


Posté le : 17/08/2016 08:24
Transférer la contribution vers d'autres applications Transférer


Re: [decouverte] enum et typedef enum
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
oui, tu as raisons, c'est plutôt des int que des octets.

Posté le : 17/08/2016 10:14
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

[decouverte] enum et typedef enum [Forums - Langage C]