IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

portée du mot clef break;


Sujet :

C++

  1. #1
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut portée du mot clef break;
    salut à tous,

    je me pose plein de questions sur le switch/case aujourd'hui:

    1) dans un switch case, si l'on fait un break dans une boucle, est ce que le break compte pour la boucle ou pour le case ?

    3) et que se passe-t-il si le break est entre accolades ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    switch(x){
      case machin:
      {
        traitement();
        break;
      }
    }
    3)et quel est le comportement d'un code qui compile lorsqu'on ne met pas de break; dans le case: ?

    à vos références ?!

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  2. #2
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Points : 158
    Points
    158
    Par défaut
    Pour moi, une fois que le compilo voit un "case"==> il exécute le code jusqu'à voir un break à sa portée puis sort du switch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    switch
    case 1:
    blabla();
    break;
     
    case 2:
    for(;;)
    {
    break1;
    }
    break2;
    c'est le break2 qui fait sortir je pense, le break1 fait sortir de la boucle for.

  3. #3
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    Citation Envoyé par loicounet Voir le message
    Pour moi, une fois que le compilo voit un "case"==> il exécute le code jusqu'à voir un break à sa portée puis sort du switch
    c'est ce que je pensais aussi, mais après des bizarreries sur l'execution du code de qq'un que je vient de modifier, je voudrais etre sur.

    Enfin, pour etre précis le compilo n'execute pas le code, il ne fait que le compiler ^^ et étant donné que le compilo ne peut pas savoir si le if sera éxécuté au runtime, je ne sais pas s'il ignore le code qui suis le premier break; ou pas

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  4. #4
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Points : 158
    Points
    158
    Par défaut
    comportement séquentiel je dirais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        switch(type)
        {
        case 5: 
            dem_thr_low_u32     = 10;	
            dem_thr_med_u32     = 30;
            dem_thr_high_u32    = 50;
     
        case 3:
            dem_thr_low_u32     = 130;
            dem_thr_med_u32     = 145;
            dem_thr_high_u32    = 160;
     
        }
    il exécute les 6 instructions à la suite.

  5. #5
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    ok et quand le break est entre accolades ? comportement normal (ie sort du switch) ?

    edit: je suis en train de craquer là *MOUHAHAHAHAHA* (rire diabolique nerveux)

    lors que je met des accolades à mon case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    case:{
    traitement();
    break;
    }
    tout fonctionne correctement, alors que si je les enlève, rien ne va plus. je vais sacrifier un animal au temple c++ et ne plus rien toucher.

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    La prière rituelle associée à break est la suivante :
    Citation Envoyé par Les saintes écritures
    The break statement shall occur only in an iteration-statement or a switch statement and causes termination of the smallest enclosing iteration-statement or switch statement; control passes to the statement following the terminated statement, if any.
    Si j'ai bien compris, tu as un comportement pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case xxx:
    {
      traitement();
      break;
    }
    Différent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case xxx:
      traitement();
      break;
    ? Avec traitement un appel de fonction ? Etrange... Peux-tu poster un petit bout de code qui reproduise ton problème ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case xxx:
    {
      traitement();
      break;
    }
    Pour moi, les seuls intérêts de l'écriture du bloc case avec des accolades est :
    • permet en C de déclarer des variables locales au bloc case (en C++ aussi mais on peut définir des variables partout en C++)
    • permet de supprimer le warning émis par le compilateur au sujet de la variable locale définie dans le case 1 qui n'est pas initialisée si on passe dans le case 2

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch(variable)
    {
       case 1:
       {
          int toto = 12;
          break;
       }
       case 2:
          break;
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    si j'arrive à restreindre le problème a quelques lignes de code je vous montrerai mais c'est assez improbable, je me tape des fonctions qui font plus de 1000 lignes, je te laisse imaginer le switch case.

    en ce moment je ressemble à ca

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par mamelouk Voir le message
    je me tape des fonctions qui font plus de 1000 lignes
    Alors là, je n'ai qu'un mot : courage...
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Sans les accolades, le code que tu as écrit ne génère pas seulement un warning, il est aussi incorrect :
    Citation Envoyé par Le standard 3.9/4
    It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps77) from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is illformed unless the variable has POD type (3.9) and is declared without an initializer (8.5).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #11
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je l'avoue, je ne connais pas la norme.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. portée du mot clef this
    Par Torx26 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2012, 21h15
  2. Réponses: 1
    Dernier message: 18/01/2012, 14h16
  3. mot-clef static
    Par keil dans le forum C++
    Réponses: 8
    Dernier message: 25/01/2006, 17h11
  4. mot clef sql pour nom de champ
    Par bobinou007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo