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 :

Position de default et case dans un switch


Sujet :

C

  1. #1
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 879
    Points : 26 155
    Points
    26 155
    Billets dans le blog
    3
    Par défaut Position de default et case dans un switch
    Une petite question très bête et résolue très vite je pense : est-il possible de mettre "default" dans un switch autre part qu'à la fin, comme dans le code suivant par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    switch(valeur)
    {
    default : /*code erreur*/
    break;
    case 1 : /*code 1*/
    break;
    case 2 : /*code 2*/
    break;
    }

  2. #2
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Oui ca fonctionne mais pourquoi n'as tu pas tout simplement essayé?

  3. #3
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Et surtout, à quoi ça peut bien servir ???

  4. #4
    Membre régulier Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Points : 120
    Points
    120
    Par défaut
    En fait, il me semble bien, sans rentrer dans les détails,
    que le compilateur va transformer les switchs en 'blocs de if'
    pour le 'langage machine'.
    Le 'défault' sera automatiquement le dernier 'else' des blocs.
    Bien que la transformation ne se fasse pas d'une manière unique,
    il me semble que ceci fonctionne comme cela (si je ne me trompe pas )
    Par contre est-ce dans la norme ANSI de mettre défault avant , ou c'est pas grave ?
    ( parceque cela peut faire bizarre pour ceux qui n'en ont pas l'habitude )

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par O( N )
    En fait, il me semble bien, sans rentrer dans les détails,
    que le compilateur va transformer les switchs en 'blocs de if'
    pour le 'langage machine'.
    Pas forcément.

    Les compilateurs sont un peu plus malins que ça : au-delà d'un certain nombre de cases, les tests seront souvent remplacés par une table de sauts, plus rapide pour brancher ; à partir d'un certain seuil seulement, à cause des architectures CPU à base de pipeline.

    Citation Envoyé par O( N )
    Par contre est-ce dans la norme ANSI de mettre défault avant , ou c'est pas grave ?
    ( parceque cela peut faire bizarre pour ceux qui n'en ont pas l'habitude )
    Je serais étonné que la norme ANSI impose une telle chose.

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par O( N )
    Par contre est-ce dans la norme ANSI de mettre défault avant , ou c'est pas grave ?
    ( parceque cela peut faire bizarre pour ceux qui n'en ont pas l'habitude )
    Je ne pense pas que la norme impose un ordre d'écriture mais il va de soi que l'habitude veut qu'on mette le default: à la fin ce qui me paraît un peu logique vu que ce dernier peut être considéré comme le dernier else dans une condition if ... else if ... else

    Par ailleurs je ne vois pas l'interêt de le mettre au début, l'ordre n'a pas vraiment d'importance étant donné que la condition va tester toutes les valeurs et s'il ne trouve pas il passe sur default s'il est présent !

  7. #7
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    Est-ce que vous mettez un break à la fin du default ? (Quand il est placé à la fin)

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Le dernier cas n'a obligatoirement besoin de break vu que c'est censé être la dernière case de l'instruction switch, moi je la met par habitude !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par ciol2.6.12
    Est-ce que vous mettez un break à la fin du default ? (Quand il est placé à la fin)
    Oui. Toujours.

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par rigobert
    Oui. Toujours.
    C'est inutile, mais c'est pas grave...

  11. #11
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Franck.H
    Je ne pense pas que la norme impose un ordre d'écriture mais il va de soi que l'habitude veut qu'on mette le default: à la fin ce qui me paraît un peu logique vu que ce dernier peut être considéré comme le dernier else dans une condition if ... else if ... else

    Par ailleurs je ne vois pas l'interêt de le mettre au début, l'ordre n'a pas vraiment d'importance étant donné que la condition va tester toutes les valeurs et s'il ne trouve pas il passe sur default s'il est présent !
    La seule fois où on pourrait en avoir besoin au début serait parce qu'on veut exécuter le code du cas qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    switch(whatever)
    {
    default :
      /* Code par defaut */
     
    case 0 :
      /* Code pour le cas 0 et la fin du cas default */
     break;
     
    case 1 :
      /* Code pour le cas 1 */
     break;
    }
    Pas que je sois fan de ce genre de chose, je préfère mettre le code en commun dans une fonction qui sera appelé dans le cas default et le cas 0 ... Mais ce n'est pas toujours possible...

    Jc

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Ouais c'est sûr que c'est pas très joli

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par rigobert
    Oui. Toujours.
    C'est inutile, mais c'est pas grave...
    C'est très relatif.
    D'ailleurs je ne crois pas que ce soit la question.
    Et si on suit ta logique, l'indentation aussi est inutile ... au compilateur.

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par rigobert
    C'est très relatif.
    D'ailleurs je ne crois pas que ce soit la question.
    Et si on suit ta logique, l'indentation aussi est inutile ... au compilateur.
    Je ne vois pas le rapport. A quoi sert le dernier break ? La notion de 'fall thru' évoque-t-elle quelque chose pour toi ?

  15. #15
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    A quoi sert le dernier break ?
    Par exemple pour éviter des erreurs en cas d'extention du code, si un "case" est ajouté à la suite du dernier.
    De même que sont mises des accolades autour d'instruction d'une ligne dans des constructions conditionnelles avec "if" ou itératives avec "for".

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    C'est inutile, mais c'est pas grave...
    Le break, lui-même, oui.
    L'habitude de toujours en mettre : pas forcément.
    Mon point de vue est le suivant : c'est un peu comme prendre l'habitude de mettre systématiquement sa ceinture (en voiture) même pour un trajet de 3 mètres. Si l'habitude est prise et que cela devient un réflexe, alors il y a moins de risque d'oublier de la mettre pour un trajet plus long (pour lequel le risque d'avoir un accident augmente).
    Tu pourrais me dire, prendre l'habitude de mettre un "break" à la fin du "default" c'est comme prendre l'habitude de mettre sa ceinture lors de notre promenade pédestre du dimanche. Cela ne serait pas faux... Mais si tu mets ta ceinture même pour les promenades pédestres, si tu dors avec, etc... Tu ne l'oublieras pas.

    Mais bon, chacun voit midi à sa porte...

    Tu serais du genre à écrire "char c=0;" au lieu de "char c='\0';" que ça ne m'étonnerait pas

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par David.Schris
    Tu serais du genre à écrire "char c=0;" au lieu de "char c='\0';" que ça ne m'étonnerait pas
    Absolument. Par contre, je mets toujours les { } avec les structures de code et NULL dans les contextes 'pointeurs'.

Discussions similaires

  1. bouclé les "case" dans un switch
    Par nicerico dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2007, 10h46
  2. [C#] Comment faire un OU dans un Switch/Case ?
    Par toxycyty dans le forum C#
    Réponses: 1
    Dernier message: 08/09/2006, 15h57
  3. Une boucle for dans un switch case?
    Par Death83 dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2006, 14h05
  4. [java]probleme de case dans switch
    Par mousstik dans le forum Langage
    Réponses: 8
    Dernier message: 19/09/2005, 16h27
  5. Réponses: 6
    Dernier message: 26/01/2003, 13h45

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