Comment sortir d'une boucle à l'intérieur d'un switch?

Je suis en train d'écrire un peu de code qui ressemble à ceci:

while(true) {
    switch(msg->state) {
    case MSGTYPE: //... 
        break;
    //... more stuff ...
    case DONE:
        break; //**HERE, I want to break out of the loop itself**
    }
}

Est-il un moyen direct de le faire?

Je sais que je peux utiliser un drapeau, et la rupture de la boucle en mettant un saut conditionnel juste après le commutateur. Je veux juste savoir si C++ a un certain de construire pour cela.

  • Pourquoi avez-vous besoin d'un saut conditionnel après le switch? Il vous suffit de changer tout de while(true) pour tout(drapeau)...
  • Je suppose que c'est une version simplifiée qu'il a mis pour illustrer ce qu'il était en train de faire.
  • Voir: Code Complet (2ème Édition). Voir aussi "la Programmation Structurée avec les instructions goto' par D E Knuth (pplab.snu.ac.kr/cours/adv_pl05/documents/p261-knuth.pdf).
  • Pressman et al: on dirait qu'il pourrait être un tableau d'état de la machine, pour moi, avec un cas pour chaque etat - y compris un FAIT de l'etat dans lequel le code doit quitter. Cependant, cela pourrait peut-être être manipulés par des " while (msg->state != DONE) " pour la boucle de contrôle.
  • Oui, exactement. J'irais même plus loin et séparer les préoccupations de la boucle de la condition d'arrêt de la boucle elle-même (l'extrait à une méthode).
  • Si vous êtes l'un de ces programmeurs qui produisent, qui sont des fonctions de plusieurs pages, vous trouverez goto attrayant et, parfois, la seule propre moyen de sortir. Si vous avez tendance à organiser votre code dans des petites fonctions qui ne sont qu'à quelques lignes de long et de faire une seule chose à chaque, vous n'aurez plus jamais ce problème. (Soit dit en passant votre code sera plus facile à lire, aussi.)
  • Si se sent comme obtenir un conseil pour arrêter de fumer quand tout ce que vous voulez savoir, c'est comment se rendre à la plus proche station de métro.
  • Eh bien, si vous ne pouvez pas voir la station de métro en face de vous, en raison de toute la fumée, que le conseil pourrait ne pas être si mauvais que ça. :)
  • Parfois, il est pratique de retour d'appel à partir d'un cas. Pas joli, mais qui fonctionne.
  • Vous pouvez toujours utiliser des if-else, sauf si vous avez de trop nombreux cas..!

InformationsquelleAutor jrharshath | 2009-09-14