Ce n'opérateur virgule signifie dans une instruction switch?
Cela signifie que vous avez un vieux compilateur
Edit post (pour montrer case range
exemple)
Les deux premiers exemples (y compris votre code d'origine ) présentent incorrect commutateur syntaxe de l'instruction (avec des explications). Le troisième exemple de code montre comment l'empilement de cas, les étiquettes se fait correctement:
Dans votre code, le compilateur doit avoir marqué le premier point, case 1,
<-- ici
#include <ansi_c.h>
int main(void){
int x = 2;
switch(x)
{
case 1,2,1: printf("Case 1 is executed");
break; //error flagged at first comma, and all comma after in case
case 2,3,1: printf("Case 2 is executed");
break;
default : printf("Default case us executed");
}
return 0;
}
Et, même modifiés comme cela, vous devez également obtenir un double de l'étiquette d'erreur:
#include <ansi_c.h>
int main(void){
int x = 2;
switch(x)
{
case 1:
case 2:
case 1: printf("Case 1 is executed"); //duplicate label 1 error. (and others below)
break;
case 2:
case 3:
case 1: printf("Case 2 is executed");
break;
default : printf("Default case us executed");
}
return 0;
}
Cet exemple est parfaitement légal (C99, C11) et utile: c'est à dire, il n'y a pas des étiquettes en double, et la syntaxe est conforme avec commutateur correct de l'utilisation par l'empilement unique étiquettes pour gérer des conditions où l' case 1: OR case 2: OR case 3:
devraient être traitées de la même manière, (dans le même bloc). Et bien sûr, la même chose est vraie pour le cas 4, 5 et 6.
#include <ansi_c.h>
int main(void){
int x = 2;
switch(x)
{
case 1:
case 2:
case 3: printf("Case 1,2 or 3 is executed"); //duplicate label 1 error. (and others below)
break;
case 4:
case 5:
case 6: printf("Case 4,5 or 6 is executed");
break;
}
getchar();
return 0;
}
Ce dernier exemple est inclus juste pour être complet. Il illustre l' case range
expression. Bien que gagner de l'intérêt chez les programmeurs C, c'est pas encore partie de C99 ou C11, mais plutôt d'une extension de Soleil (une variante d'unix) et le compilateur GNU C (et coll.?):
...
switch(x)
{
case 'a' ... 'z': //note: spaces between all characters ('a') and ellipses are required
printf("lowercase alpha char detected");
break;
case 'A' ... 'B':
printf("uppercase alpha char detected");
break;
default: printf("Default case is executed");
}
...
La raison de l'ambiguïté des résultats que vous voyez à partir d'un compilateur à l'autre, c'est que le Turbo C est vraiment vraiment vieux. La version que vous utilisez peut pas analyser et de compiler la même façon un nouveau compilateur. :)
Pour un (bon marché) de remplacement, je vous suggère d'essayer de minGW. Je l'utilise avec Code::Blocks, il est très bien intégrée à l'IDE. Il est plus courant, et entretenus de manière assez bien pour un compilateur libre. (peut-être mieux que certains compilateurs commerciaux)