65 votes

Que faire si je n'écris pas par défaut dans le cas du commutateur ?

int a = 10;
switch(a){
case 0:
    printf("case 0");
    break;
case 1:
    printf("case 1");
    break;
}

Le code ci-dessus est-il valide ?

Si je suis sûr que l'int a n'aura pas d'autre valeur que 1 et 0, puis-je éviter default ?

Et si dans tous les cas une valeur était différente de 1 et 0 ?

Je sais que c'est une question idiote, mais je pensais que ce serait peut-être un comportement illégal ou indéfini, alors j'ai juste demandé de m'en assurer.

115voto

Charles Bailey Points 244082

Le code est valide. S'il n'y a pas d' default: et qu'aucune des étiquettes case correspond à la valeur « commutée », alors aucune des instructions composées contrôlées ne sera exécutée. L'exécution se poursuivra à partir de la fin de l'instruction switch.

ISO/CEI 9899:1999, section 6.8.4.2 :

[...] Si aucune case convertie ne correspond et qu'il n'y a pas d' default , aucune partie du corps du commutateur n'est exécutée.

41voto

Praetorian Points 47122

Comme d'autres l'ont souligné, il s'agit d'un code parfaitement valide. Cependant, du point de vue du style de codage, je préfère ajouter une default vide avec un commentaire pour indiquer clairement que je ne l'ai pas oublié par inadvertance.

 int a=10;
switch(a)
{
case 0: printf("case 0");
         break;
case 1: printf("case 1");
         break;
default: // do nothing;
         break;
}

Le code généré avec/sans le default doit être identique.

9voto

drdwilcox Points 2970

C'est un code parfaitement légal. Si a n'est ni 0 ni 1, alors le bloc de commutation sera entièrement ignoré.

3voto

Igor Oks Points 9737

Il est valable de ne pas avoir de cas default .

Cependant, même si vous êtes sûr que vous n'aurez pas de valeur plutôt que 1 et 0 , c'est une bonne pratique d'avoir un cas par défaut, pour attraper toute autre valeur (bien que cela soit théoriquement impossible, cela peut apparaître dans certaines circonstances, comme buffer overflow) et afficher une erreur.

2voto

aleroot Points 30853

Oui, le code ci-dessus est valide.

Si la condition du commutateur ne correspond à aucune condition du cas et qu'une valeur par défaut n'est pas présente, l'exécution du programme se poursuit et quitte le commutateur sans rien faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X