Quelle est la bonne syntaxe, s'il y en a une

Bonjour à toutes et à tous,

Je souhaiterais établir un switch autour de 3 valeurs : {Aucun, HMS, Autre}. Ces trois valeurs appartiendraient à "modeSet"

Comment définir ces termes pour obtenir quelque chose qui ressemble à ce qui suit :

  switch(modeSet) {
    case Aucun:
      break;
    case HMS:
      break;
    case Autre:
      break;
  }

Cordialement.

Pierre.

Pas vraiment. modeSet est une variable entière qui peut prendre une ce ces trois valeurs : Aucun, HMS, Autre.
Tu peux définir Aucun, HMS, Autre comme ceci :

enum {Aucun, HMS, Autre}; // ou Aucun vaut ZERO, MHS vaut 1, etc.
// mais tu peux changer les valeurs : 
enum {Aucun = 0, HMS = 10, Autre = 100};

Je pense qu'un default ne ferait pas de mal, au cas où :

  switch(modeSet) {
    case Aucun:
      break;
    case HMS:
      break;
    case Autre:
      break;
    default :
      Serial.println("what's up doc ???");
      break;
  }

Par exemple, en Pascal Objet, on peut faire ce qui suit:

type
  TPosCurseur = (Hors, Dedans, CoinHG, CoinHD, CoinBD, CoinBG,

var
    CurseurOu: TPosCurseur;    {Position du curseur par rapport à la sélection}

        case CurseurOu of
   BordG: Org.X:= X;
   BordD: Fin.X:= X;
   BordH: Org.Y:= Y;
   BordB: Fin.Y:= Y;
  CoinHG: Org:= Point(X, Y);
  CoinBD: Fin:= Point(X, Y);
        end;

Cordialement.

Pierre.

Merci "hbachetti", les énumérations m'étaient sorties de la tête.

Cordialement.

Pierre.

Un enum est un type fort en C++ et on peut donner le type sous jacent (sinon c'est int par défaut) lors de la définition.

Si on écrit

enum Modes : byte {AUCUN, HMS, AUTRE}; 
Modes modeSet = AUCUN;

alors la variable modeSet est typée et n'est pas un entier.

Si vous essayez de compiler ceci sur ESP32

enum Modes : byte {AUCUN, HMS, AUTRE};
Modes modeSet = AUCUN;

void setup() {
  modeSet = 2; // AUTRE
}

void loop() {}

le compilateur ne va pas être content et va vous dire

sketch.ino: In function 'void setup()':
sketch.ino:5:13: error: invalid conversion from 'int' to 'Modes' [-fpermissive]
    5 |   modeSet = 2; // AUTRE
      |             ^
      |             |
      |             int

Error during build: exit status 1

Et donc si l'on ne fait des affectations qu'avec les énumérations (ce qui est impératif si l'on veut respecter le type), alors on n'a pas besoin de mettre un default: (sauf si on n'inclut pas les 3 modes dans le switch)

Pour éviter qu'un enum vienne "polluer" le reste du code quand on fusionne des bibliothèques, c'est aussi parfois bien de créer soit un namespace, soit d'avoir des noms qui sortent un peu du commun. (bon avec des mots en français on a un peu moins de risques mais HMS pourrait être trouvé pour "Hour, Minute, Second"

Merci J-M-L pour ces infos complémentaires.

Faut que je fasse attention, car HMS veut bien dire Heure, Minute et Seconde dans mon cas !

Cordialement.

Pierre.

si vous n'importez pas de bibliothèque tierces le risque est limité

parfois on donne un petit nom qui identifie l'auteur

enum Modes : byte {CHPR_AUCUN, CHPR_HMS, CHPR_AUTRE};

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.