{"id":2256,"date":"2022-10-24T08:41:50","date_gmt":"2022-10-24T13:41:50","guid":{"rendered":"http:\/\/ve2cuy.com\/420-1c4\/?page_id=2256"},"modified":"2022-10-24T09:15:34","modified_gmt":"2022-10-24T14:15:34","slug":"linstruction-du-langage-c-enum","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/linstruction-du-langage-c-enum\/","title":{"rendered":"L&rsquo;instruction &lsquo;enum&rsquo; du langage &lsquo;C&rsquo;"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/10\/number_enumeration_calculation_reckoning_digit_count_numeration-512.webp\" alt=\"\" class=\"wp-image-2260\" width=\"283\" height=\"283\"\/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"has-vivid-cyan-blue-color has-text-color wp-block-heading\">1.0 &#8211; L&rsquo;instruction &lsquo;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">enum<\/mark>&lsquo;<\/h2>\n\n\n\n<p>\u00c9num\u00e9ration ou <strong>enum<\/strong> est un type de donn\u00e9es <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">d\u00e9fini par l&rsquo;utilisateur<\/mark> en C. <\/p>\n\n\n\n<p>Il est principalement utilis\u00e9 pour attribuer des noms \u00e0 des constantes enti\u00e8res (<strong>int<\/strong>). <\/p>\n\n\n\n<p>Ces noms <strong>facilitent <\/strong>la lecture et la maintenance d&rsquo;un programme.<\/p>\n\n\n\n<p>Le mot-cl\u00e9 \u2018<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">enum<\/mark><\/strong>\u2019 est utilis\u00e9 pour d\u00e9clarer de nouveaux types d\u2019\u00e9num\u00e9ration en C et C++. <\/p>\n\n\n\n<p>Voici des exemples d&rsquo;utilisation de l&rsquo;instruction &lsquo;<em><strong>enum<\/strong><\/em>&lsquo;:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Exemple 01\nenum  Etat {VRAI = 1, FAUX = 0}; \n\/\/ Convention de noms: LeType, les membres (VRAI|FAUX ou vrai|faux)\n\n\n\/\/ Exemple 02\nenum JourDeLaSemaine { \n       dimanche, \n       lundi, \n       mardi, \n       mercredi, \n       jeudi, \n       vendredi, \n       samedi\n};\n\n<\/pre>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Note<\/mark><\/strong>: Si nous n&rsquo;attribuons pas explicitement de valeurs aux membres du <strong><em>enum<\/em><\/strong>, le compilateur affecte par d\u00e9faut des valeurs \u00e0 partir de 0. Par exemple, dans l&rsquo;exemple 02 pr\u00e9c\u00e9dent, dimanche obtient la valeur 0, lundi vaut 1, etc.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"has-vivid-purple-color has-text-color wp-block-heading\">1.1 &#8211; Exemple d&rsquo;utilisation d&rsquo;une variable de type <em>enum<\/em><\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include \"Streaming.h\"\n\nenum Menu {\n  option1,   \/\/ vaut 0\n  option2,   \/\/ vaut 1\n  option3    \/\/ vaut 2\n};\n\n\nvoid setup(){\n  Serial.begin(9600);\n\n  Menu unMenu = option2;\n\n  switch (unMenu) {\n\n    case option2: Serial &lt;&lt; \"Option 2\"; break;\n\n    default: Serial &lt;&lt; \"Choix invalide!\";\n  } \/\/ switch\n\n} \/\/ setup()\n\nvoid loop(){}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"has-text-align-left has-vivid-red-color has-text-color wp-block-heading\">1.2 &#8211; Affecter une valeur aux membres d&rsquo;un &lsquo;enum&rsquo;.<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include \"Streaming.h\"\n\nenum Menu {\n  option1 = 1, \n  option2 = 2, \n  option3 = 0 \n};\n\n\nvoid setup(){\n  Serial.begin(9600);\n\n  Menu unMenu = option3;\n\n  switch (unMenu) {\n\n    case option1: Serial &lt;&lt; \"Option 1\"; break;\n    case option2: Serial &lt;&lt; \"Option 2\"; break;\n    case option3: Serial &lt;&lt; \"Option 3\"; break;\n\n    default: Serial &lt;&lt; \"Choix invalide!\";\n  } \/\/ switch\n\n} \/\/ setup()\n\n\nvoid loop(){}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\">1.3 &#8211; Un autre exemple : une liste de fruits??? <\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Exemple d'utilisation de l'instruction 'enum'\n#include &lt;Streaming.h>\n\nenum desFruits {\n  pomme,\n  cerise,\n  kiwi,\n  banane,\n  fraise = 99\n};\n\nvoid setup() {\n  Serial.begin(115200);\n\n  desFruits unFruit = kiwi;\n\n  switch (unFruit) {\n\n    case kiwi: Serial &lt;&lt; \"Je suis un kiwi ;-)\"; break;\n\n    default: Serial &lt;&lt; \"Je suis un fruit non trait\u00e9\";\n  } \/\/ switch\n\n  Serial &lt;&lt; \" et j'ai la valeur: \" &lt;&lt; unFruit &lt;&lt; endl; \n} \/\/ setup()\n\nvoid loop() {\n  \/\/ put your main code here, to run repeatedly:\n\n}\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\">1.4 &#8211; Gestion d&rsquo;un menu avec enum &#8211; sous Wokwi<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"431\" height=\"507\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/10\/Capture-de\u0301cran-2022-10-23-a\u0300-14.31.35.png\" alt=\"\" class=\"wp-image-2250\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/10\/Capture-de\u0301cran-2022-10-23-a\u0300-14.31.35.png 431w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/10\/Capture-de\u0301cran-2022-10-23-a\u0300-14.31.35-255x300.png 255w\" sizes=\"auto, (max-width: 431px) 100vw, 431px\" \/><\/figure>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Projet: Enum+Menu\n    Auteur: Alain Boudreault\n    Date:   2022.10.23\n    ------------------------------------\n    Description:  Exemple d'utilisation de l'instruction 'enum' pour la gestion\n                  d'un menu affich\u00e9 sur un LCD. \n\n*\/\n\n#define DEBUG\n#define WOKWI\n#include &lt;Streaming.h>\n#include \"projet.h\"       \/\/ Les 'define's du projet sont dans un fichier \u00e0 part.\n\n#ifdef WOKWI\n#include &lt;LiquidCrystal_I2C.h>\n  LiquidCrystal_I2C ecranLCD(LCD_ADRESSE_I2C,LCD_NB_COLONNE,LCD_NB_LIGNE);   \n#else\n#include \"rgb_lcd.h\"  \n  rgb_lcd ecranLCD;    \n#endif\n\n\nvoid setup() {\n#ifdef DEBUG  \n  Serial.begin(UART_VITESSE);\n  Serial &lt;&lt; \"D\u00e9but du projet enum+menu\\n\";\n#endif\n  pinMode(BOUTON, INPUT);\n  ecranLCD.begin(LCD_NB_COLONNE, LCD_NB_LIGNE);\n  ecranLCD.cursor_on();\n  ecranLCD &lt;&lt; \"Ex d'un Menu\";\n  ecranLCD.setCursor(LCD_PREMIERE_COLONNE, LCD_LIGNE2);  \n  ecranLCD &lt;&lt; \"Version 1.00\";\n  delay(DELAI_MSG_DEBUT);\n  ecranLCD.clear();  \/\/ Effacer l'\u00e9cran\n  ecranLCD &lt;&lt; \"Menu1 Menu2 Menu3\";\n  ecranLCD.setCursor(LCD_PREMIERE_COLONNE, LCD_LIGNE1);\n  ecranLCD.blink_on(); \n} \/\/ setup()\n\nvoid loop() {\n  static optionMenu choixMenu = menu1;\n  static unsigned long compteurBouton = 0;\n  \n  int etatBouton = digitalRead(BOUTON);\n  if ( etatBouton == HIGH) {\n    delay(BOUTON_DELAI_REBOND);\n    while (digitalRead(BOUTON)) ;\n    delay(BOUTON_DELAI_REBOND);\n\n    compteurBouton++;\n\n    \/\/ Calculer le choix menu en fonction du reste d'une division par trois (3)\n    \/\/ Note: Il y a trois options au Menu.\n    choixMenu = compteurBouton % 3;\n\n#ifdef DEBUG\n    Serial &lt;&lt; \"\\nChoix menu = \" &lt;&lt; choixMenu;\n#endif\n    \/\/ Afficher le choix courant sur le LCD\n    ecranLCD.setCursor(LCD_PREMIERE_COLONNE, LCD_LIGNE3);                  \n    ecranLCD &lt;&lt; MSG_CHOIX_MENU_SELECTIONNE &lt;&lt; choixMenu+1;\n\n\n    \/\/ D\u00e9placer le curseur du LCD en fonction de la s\u00e9lection menu\n    switch (choixMenu) {\n\n      case menu1: ecranLCD.setCursor(MENU_POS_OPTION_1, LCD_POS_LIG_MENU);\n                  break;\n      case menu2: ecranLCD.setCursor(MENU_POS_OPTION_2, LCD_POS_LIG_MENU);\n                  break;\n      case menu3: ecranLCD.setCursor(MENU_POS_OPTION_3, LCD_POS_LIG_MENU);      \n                  break;\n\n      default: break;  \/\/ ERREUR!!!\n\n    } \/\/ switch (choixMenu)\n  } \/\/ if\n\n} \/\/ loop()  <\/pre>\n\n\n\n<p>Le fichier projet.h:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*****************************************\/\n#define   UART_VITESSE          115200\n#define   BOUTON                2\n#define   BOUTON_DELAI_REBOND   5\n#define   DELAI_MSG_DEBUT       1000\n#define   LCD_DELAI             50\n#define   LCD_NB_LIGNE          2\n#define   LCD_NB_COLONNE        16\n#define   LCD_LIGNE1            0\n#define   LCD_LIGNE2            1\n#define   LCD_LIGNE3            2\n#define   LCD_PREMIERE_COLONNE  0\n#define   LCD_POSITION_COMPTEUR 10\n#define   LCD_ADRESSE_I2C       0x27\n#define   LCD_POS_COL_MENU      0\n#define   LCD_POS_LIG_MENU      0\n\n#define   MENU_POS_OPTION_1     LCD_POS_COL_MENU + 0\n#define   MENU_POS_OPTION_2     LCD_POS_COL_MENU + 6\n#define   MENU_POS_OPTION_3     LCD_POS_COL_MENU + 12\n\n#define   MSG_CHOIX_MENU_SELECTIONNE \"Choix --> Menu\"\n\n\/*****************************************\/\n\nenum  optionMenu {\n  menu1,\n  menu2,\n  menu3\n};<\/pre>\n\n\n\n<p>Le projet Wokwi est disponible <a href=\"https:\/\/wokwi.com\/projects\/346330484426408531\">ici<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1.0 &#8211; L&rsquo;instruction &lsquo;enum&lsquo; \u00c9num\u00e9ration ou enum est un type de donn\u00e9es d\u00e9fini par l&rsquo;utilisateur en C. Il est principalement utilis\u00e9 pour attribuer des noms \u00e0 des constantes enti\u00e8res (int). Ces noms facilitent la lecture et la maintenance d&rsquo;un programme. Le mot-cl\u00e9 \u2018enum\u2019 est utilis\u00e9 pour d\u00e9clarer de nouveaux types d\u2019\u00e9num\u00e9ration en C et C++. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-2256","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/comments?post=2256"}],"version-history":[{"count":8,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2256\/revisions"}],"predecessor-version":[{"id":2269,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2256\/revisions\/2269"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/media?parent=2256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}