2016-06-13 3 views
6
int main() 
{ 
    switch(1,2) 
    { 
     case 1:printf("1");break; 
     case 2:printf("2");break; 
     default: printf("error");break; 
    } 
} 

Est-ce valide dans c?En c, une instruction switch peut-elle avoir 2 arguments?

Je pensais que ce ne devrait pas être, mais quand je compilé, il montre aucune erreur et produit la sortie 2.

+0

Il existe un moyen de faire en sorte que l'instruction case fasse deux cas si c'est ce que vous demandez - mais pas avec une virgule. –

+0

@ jerry-jeremiah qu'est-ce que c'est, pouvez-vous élaborer s'il vous plaît? –

Répondre

13

Oui, cela est valide, car dans ce cas, le , est un comma operator.

C11 Citant, chapitre §6.5.17, opérateur Comma, (Souligné par)

L'opérande gauche d'un opérateur virgule est évaluée comme une expression vide; il y a un point de séquence entre son évaluation et celle de l'opérande de droite. Ensuite, l'opérande correct est évalué; le résultat a son type et sa valeur.

Cette évalue et() supprime les opérande gauche et utilise la valeur de la droite (côté) une. Ainsi, la déclaration ci-dessus est essentiellement le même que

switch(2) 

Juste pour préciser, il ne utiliser deux valeurs, comme vous avez pu attendre quelque chose comme, la mise sous tension 1 ou 2.

+0

Cet opérateur de virgule peut-il être utile dans tous les cas? Je demande simplement ceci parce que je ne pense pas que ce soit utile dans ce cas. –

+1

@DhruvaMehrotra Eh bien, c'est une question large. C'est oui et non, on ne sait jamais. Il n'y a techniquement aucun problème, c'est tout. –

+0

@DhruvaMehrotra vous pouvez voir quelques cas où c'est utile dans la question en double. Parmi ceux-ci, il est rarement utile dans C. En C++ vous pouvez le surcharger tant de gens trouvent quelques cas plus utiles pour cela http://stackoverflow.com/a/5602236/995714 –