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 :

[Débutant] Opérateur && : mode d'éxécution


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 49
    Par défaut [Débutant] Opérateur && : mode d'éxécution
    salut,

    petite question concernant l'opérateur && dans une condition if, par exemple :

    la fonction calc rendant bien évidemment un booléen...

    si toto est à FALSE, est-ce que calc est tout de même executée?

    merci !!

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Non, l'évaluation se fait de gauche à droite et si toto est false calc(a,b) ne sera pas calculé.
    Ce genre de truc est potentiellement dangereux.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    la fonction calc rendant bien évidemment un booléen...
    à ma connaissance il n'y a pas de type booléen en C.
    C considère que 0==false et a==true où a est du type int et different de 0.
    le resultat des operateurs logiques est du type int.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 49
    Par défaut
    Trap D, à ton sens mieux vaut le faire en temps temps, genre tester toto puis eventuellement executer calc et tester son résultat ??

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ce n'est pas un problème lié à if(...)
    C'est un des rares cas où l'ordre d'évaluation des termes d'une expression est imposé et où tous les opérandes ne seront pas forcémént évalués. C'est extrèmement commode dans certans cas. Mais Trap D le signale justement il FAUT connaître ce comportement parce que celà signifie que la fonction calc(...) n'est appelée QUE si toto est Vrai et tirer avantage de ce comportement.
    Ce comportement rend l'opérateur effectivement non commutatif puisque ne fait pas la même chose que

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 49
    Par défaut
    OK j'avais bien compris ca

    bonne soirée et bonne semaine !!!
    a++

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Trap D
    Non, l'évaluation se fait de gauche à droite et si toto est false calc(a,b) ne sera pas calculé.
    Ce genre de truc est potentiellement dangereux.
    Ah ? Je dirais plutôt que le fait que le sens de l'évaluation soit défini est au contraire une source de sécurité. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (p != NULL && *p != 0)
    {
    }
    Ca, ce serait dangereux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (*p != 0 && p != NULL)
    {
    }

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    afrikha :
    à ma connaissance il n'y a pas de type booléen en C
    C'est très discutable (même en Ansi C)

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par afrikha
    la fonction calc rendant bien évidemment un booléen...
    à ma connaissance il n'y a pas de type booléen en C.
    Du moins pas en C90.
    C considère que 0==false et a==true où a est du type int et different de 0.
    le resultat des operateurs logiques est du type int.
    et les valeurs sont 0 ou 1.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 49
    Par défaut
    Emmanuel, je veux bien un peu plus d'explications sur ton exemple, je vois pas le truc là

    merci

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par arthix
    Emmanuel, je veux bien un peu plus d'explications sur ton exemple, je vois pas le truc là
    l'expression de gauche p != NULL est évaluée en premier, ce qui fait que si elle est vrai, l'expression de droite n'est pas évaluée. Comme celle de droite comporte un déréférencement de pointeur, ça tombe bien!

    Si on avait écrit l'expression dans l'autre sens (2ème exemple), on aurait eu un risque de déréférencement d'un pointeur NULL, ce qui entraine un comportement indéfini (autrement dit, c'est un bug, mais pas forcément visible, ce qui le rend extrèmement dangereux).

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 49
    Par défaut
    ok thanks !!

    bonne soirée

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Emmanuel, je disais potentiellement dangereux car de la manière donc c'est écrit avec une lecture un peu rapide on peut oublier qu'il n'y a pas toujours appel à la fonction.
    Moi je ne conseille vraiment pas cette écriture.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Trap D
    Emmanuel, je disais potentiellement dangereux car de la manière donc c'est écrit avec une lecture un peu rapide on peut oublier qu'il n'y a pas toujours appel à la fonction.
    Moi je ne conseille vraiment pas cette écriture.
    Oui, ok, c'est un peu de l'écriture ... d'apprenti gourou.

    En ce qui me concerne, j'y suis habitué, pas de problème.

  15. #15
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    C'est vrai, tu n'es plus un débutant
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

Discussions similaires

  1. [Débutant] Programme Java en mode console / Applet
    Par Metallic-84s dans le forum Applets
    Réponses: 5
    Dernier message: 23/05/2013, 11h06
  2. [Débutant] Opérateurs Bitwise (Décalage)
    Par crimetime dans le forum C
    Réponses: 2
    Dernier message: 03/06/2010, 11h17
  3. [Cobertura] [Débutant] Problème avec le mode Command-Line
    Par jgavard dans le forum Qualimétrie
    Réponses: 0
    Dernier message: 09/03/2008, 22h29
  4. [débutant] opérateur in
    Par Bruno@Chrysis dans le forum C#
    Réponses: 2
    Dernier message: 20/02/2007, 14h50

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