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 :

If sans accolade


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Par défaut If sans accolade
    Bonjour tout le monde,

    Dernièrement, j'ai appris qu'il était préférable de laisser les accolades pour un if ne contenant qu'une seule instruction. Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (toto)
    {
         instruction;
    }
    préférable que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (toto)
         instruction;
    Est-ce que quelqu'un peut me le confirmer ?
    Merci beaucoup d'avance :-)

  2. #2
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Je ne sais pas si il y a une "règle" commune, mais je pense que c'est une question de choix. Personnellement si je n'ai qu'une instruction simple je ne mets pas les accolades. Si ton code est bien indenté et clair tu verras tout de suite en cas de modification qu'il faudra rajouter les accolades. Je ne trouve pas plus clair de les rajouter pour rien.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Par défaut
    oui, mais je ne parle pas d'un point de vue de lisibilité, mais de performance...

  4. #4
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    ça ne change absolument rien en terme de performance

  5. #5
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    Salut,

    Normalement non, le compilateur va generer exactement le meme code

    de meme que d'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Condition?choix1:choix2;
    ne change pas les performances. Pour t'en persuader compare le code assembleur generer par le compilateur dans chacun des cas.

    XXiemeciel

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    C'est surtout demandé de l'utiliser pour éviter des bugs.

  7. #7
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    de meme que d'utiliser

    Code:

    Condition?choix1:choix2;


    ne change pas les performances. Pour t'en persuader compare le code assembleur generer par le compilateur dans chacun des cas.
    ben sur solaris 2.8 en forte 6 U2 en debug sans optim
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(y==z)
    {
        t=p;
    }
    else
    {
       t=q;
    }
    n'est pas équivalent à
    j'en été le premier surpris, d'ailleurs j'ai vérifé car c'est pas moi qui m'en est apperçu mais un mec de mon équipe.

    en faisant des tests (assez sommaire) de perf l'opérateur ternaire (?) va 21% plus vite.

  8. #8
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    probablement parce que le code cond?a:b ne peut pas etre debuggé (tu ne peux pas mettre de breakpoint sur a ou sur b) donc en debug le passage sur cette ligne sera plus rapide.

    ceci dit lorsque l'on parle de performance c'est le plus souvent en version release sinon ca ne rime pas a grand chose.

    XXiemeciel

  9. #9
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Personellement je préfère ne pas mettre les accolades...
    Par contre pour la lisibilité, ne pas oublier la tabulation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(test==true) //à noter que c'est la même chose que if(test)
      std::cout"exemple!":
    else
    //blabla

  10. #10
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Honnêtement, même si le C/C++ donne la possibilité d'outrepasser les accolades, il vaut mieux les mettre afin de délimiter le bloc de code qui sera exécuté en fonction des conditions.

    C'est plus lisible, plus compréhensible.

    Concernant les tabulations, Linus Torvalds préconise une tabulation de 8 caractères :p moi j'en préconise 4 :p

  11. #11
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Ouais... 8)
    Je vais suivre les conseils de la Free Foundation désolé pour ta technique qui n'est pas mauvaise non plus ...

  12. #12
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    Citation Envoyé par xxiemeciel
    probablement parce que le code cond?a:b ne peut pas etre debuggé (tu ne peux pas mettre de breakpoint sur a ou sur b) donc en debug le passage sur cette ligne sera plus rapide.

    ceci dit lorsque l'on parle de performance c'est le plus souvent en version release sinon ca ne rime pas a grand chose.

    XXiemeciel
    Dans ma boite les perfs sont un sujet assez important, pourtant on livre tout en debug. Cela peut paraitre effarant, mais on a fait des tests et pour un même serveur en solaris 2.8 compile en forte 6 U2 entre une release et une debug on a seulent 10% de gain en temps de traitement sur une reqête isolée et 30% en condition de stress. En prenant en compte que en version release on pert la possibilité d'analyser les cores quand l'appli crash, on a décidé de resté en debug.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Par défaut
    Merci pour toutes vos réponses !!

    Finalement pour être sûre , j'ai suivi le conseil de xx1emeciel : j'ai comparé le code assembleur pour le if avec ou sans {} et avec opérateur ternaire.

    Dans les 3 cas, le code assembleur est STRICTEMENT identique !!

    Encore merci ;-)

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Il y a des cas, néanmoins ou l'opérateur ternaire est indispensable

  15. #15
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    Citation Envoyé par VoidSeer
    Il y a des cas, néanmoins ou l'opérateur ternaire est indispensable
    Ah bon ? peux tu etre plus explicite car la je vois pas trop.

    XXiemeciel

  16. #16
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par défaut
    Citation Envoyé par VoidSeer
    Il y a des cas, néanmoins ou l'opérateur ternaire est indispensable
    Utile certainement.
    indispensable, je ne pense pas.

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Juste pour la petite bête, je veux bien développer.
    L'opérateur ternaire est une expression et non pas une suite d'instructions. De ce fait, il peut
    être utilisé par exemple sur la liste d'initialisation d'un constructeur, pour initialiser de manière conditionnelle un membre constant par exemple.
    Un exemple monté de toute pièce, et sans aucune autre valeur que d'illustration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class Matrix
    {
    public:
      Matrix(int x, int y);
     
    protected:
      const bool isSquare_;
    };
     
    Matrix::Matrix(int x, int y)
      : isSquare_( (x==y) ? true : false )
    {
      ... 
    }
    Ca n'arrive pas tous les jours, c'est certain.

  18. #18
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    Citation Envoyé par lianoos
    Merci pour toutes vos réponses !!

    Finalement pour être sûre , j'ai suivi le conseil de xx1emeciel : j'ai comparé le code assembleur pour le if avec ou sans {} et avec opérateur ternaire.

    Dans les 3 cas, le code assembleur est STRICTEMENT identique !!

    Encore merci ;-)
    Le but de ma remarques n'était pas de te faire douter , juste de préciser que dans certaines conditions (mode debug, sans optim) ce n'est pas équivalent.

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

Discussions similaires

  1. [Débutant] Instruction IF sans les "{}" (accolades)
    Par danouvrs dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 05/09/2008, 12h40
  2. Accolade sans mode math
    Par Niun dans le forum Mathématiques - Sciences
    Réponses: 4
    Dernier message: 07/04/2008, 19h12
  3. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  4. [Kylix] Fiches sans bordure
    Par alex dans le forum EDI
    Réponses: 4
    Dernier message: 28/04/2002, 21h19

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