Discussion

Vu le nombre de parties optionnelles dans la syntaxe, il y a 3 types d'utilisations possibles pour le switch. Première possibilité, on peut avoir dans chaque alternative une liste-d'instructions et un break; comme dans l'exemple suivant :

enum {BLEU=1, BLANC, ROUGE};

void print_color(int color)
{
switch(color)
   {
   case BLEU : printf("bleu"); break;
   case BLANC : printf("blanc"); break;
   case ROUGE : printf("rouge"); break;
   default : printf("erreur interne du logiciel numéro xx\n");
   }
}

Deuxième possibilité, on peut avoir une ou plusieurs alternatives ne possédant ni liste-d'instructions, ni break;. Supposons que l'on désire compter dans une suite de caractères, le nombre de caractères qui sont des chiffres, et le nombre de caractères qui ne le sont pas. On peut utiliser le switch suivant :

switch(c)
   {
   case '0':
   case '1':
   case '2':
   case '3':
   case '4':
   case '5':
   case '6':
   case '7':
   case '8':
   case '9': nb_chiffres++; break;
   default: nb_non_chiffres++;
   }

Troisième possibilité, une alternative peut ne pas avoir de break comme dans l'exemple suivant :

enum {POSSIBLE, IMPOSSIBLE};

void print_cas(int cas)
{
switch (cas)
   {
   case IMPOSSIBLE: printf("im");
   case POSSIBLE:   printf("possible\n"); break;
   case default:    printf("erreur interne du logiciel numéro xx\n");
   }
}
Une telle utilisation du switch pose un problème de lisibilité, car l'expérience montre que l'absence du break; est très difficile à voir. Il est donc recommandé de mettre un commentaire, par exemple de la façon suivante :
   case IMPOSSIBLE: printf("im");   /*   ATTENTION: pas de break;   */



Matthieu Moy 2017-02-08