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 :

ordre d'évaluation d'une expression logique


Sujet :

C

  1. #1
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut ordre d'évaluation d'une expression logique
    Bonjour,

    en C++ les expressions logiques sont évaluées de la gauche vers la doite. Par exemple, l'expression suivante :
    ne fera pas appel à c() si a() ou b() renvoit faux.

    En est-il de même pour le langage C, et si oui, est-ce normalisé ?

  2. #2
    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 Re: ordre d'évaluation d'une expression logique
    Citation Envoyé par tut
    Bonjour,

    en C++ les expressions logiques sont évaluées de la gauche vers la droite. Par exemple, l'expression suivante :
    ne fera pas appel à c() si a() ou b() renvoit faux.

    En est-il de même pour le langage C, et si oui, est-ce normalisé ?
    Oui, oui.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    merci, merci,
    quelle norme ?
    Ansi ? ISO ? Posix ?
    J'ai jamais trop saisi la nuance entre ces différentes normes...

  4. #4
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Salut,

    alors (corrigez moi si je me trompe), en gros:
    Ansi: ecrire du C correct (ne pas faire des declarations de int dans l initialisation de boucles for,... ce genre de choses)
    Posix: code portable => peut tourner sous differentes plateformes sans changer les appels de fonctions, etc....

    donc quelque chose peut etre a la fois posix et ansi!

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  5. #5
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 337
    Points : 130 288
    Points
    130 288
    Billets dans le blog
    1
    Par défaut
    A ma connaissance, ANSI et ISO ça revient au même, et ça standardise le langage lui-même (mots-clé, constructions, ainsi que la bibliothèque standard de base). Les deux normes en vigueur pour le C sont le C89 ou C90 (c'est la même chose mais l'appellation diffère selon les auteurs) et le C99.

    POSIX est une norme générale pour standardiser les systèmes de type Unix. Une partie de POSIX (POSIX .1) consiste à proposer une API standard en C qui fonctionne sur tous les Unix, donc de définir la bibliothèque standard et toutes les fonctions de programmation système.

    Un appel de fonction inclu dans ANSI l'est dans POSIX .1 ; l'inverse n'est bien sûr pas forcément vrai.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  6. #6
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    merci !

  7. #7
    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 tut
    quelle norme ?
    Ansi ? ISO ? Posix ?
    J'ai jamais trop saisi la nuance entre ces différentes normes...
    • L'ISO (organisation internationale) définit le langage C. C'est la norme.
    • ANSI est l'organisation étazunienne qui distribue cette norme (comme l'AFNOR en France).
    • POSIX définit, entre autre, des fonctions systèmes qui rendent les applications portables entre des systèmes hétérogènes. Les interfcaes décrites sont compatibles avec le langage C, mais elles peuvent être appelées de n'importe quel autre langage à condition qu'une interface pour ce langage soit fourni avec l'implémentation du-dit langage...

      Comme avec toutes les fonctions systèmes, le comportement de ces fonctions est indépendant du langage utilisé.


    Détails ici:

    http://emmanuel-delahaye.developpez.com/index.htm
    Pas de Wi-Fi à la maison : CPL

  8. #8
    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 Pouic
    alors (corrigez moi si je me trompe), en gros:
    Ansi: ecrire du C correct (ne pas faire des declarations de int dans l initialisation de boucles for,... ce genre de choses)
    Non. ce 'genre de choses', par exemple, est supporté par ISO-C 99 (idem ANSI-C 2000).
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    d ou l utilisation du "en gros".....

    mais je reconnais que mon exemple etait mal choisi..

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Pour ce qui est de la déclaration de variable avec la norme ANSI, à ce qu'il me semble, elle doivent toutes être déclarer en début de fonction (ou du main). Sinon le compilateur risque de renvoyer une erreur si tu compile avec les options:

    -ansi et -pedantic

    Je ne me rappel plus exactement de l'erreur mais sait qu'elle existe. Maintenant si je me trompe corrigez moi.

  11. #11
    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 Nadram
    Pour ce qui est de la déclaration de variable avec la norme ANSI, à ce qu'il me semble, elle doivent toutes être déclarer en début de fonction (ou du main). Sinon le compilateur risque de renvoyer une erreur si tu compile avec les options:

    -ansi et -pedantic

    Je ne me rappel plus exactement de l'erreur mais sait qu'elle existe. Maintenant si je me trompe corrigez moi.
    main() est une fonction.
    En C90, une variable doit être définie en tête de bloc.
    En C99, c'est où on veut, même dans le premier champ d'un 'for'.
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. Traduire une expression logique en comportement de bouton
    Par mamax29 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 20/10/2011, 09h06
  2. Réponses: 16
    Dernier message: 02/03/2009, 11h16
  3. Vérifier une expression logique
    Par mike600river dans le forum Langage
    Réponses: 2
    Dernier message: 02/01/2008, 16h08
  4. Évaluation d'une expression conditionnelle
    Par Evocatii dans le forum Langage
    Réponses: 2
    Dernier message: 05/08/2007, 13h27
  5. Réponses: 17
    Dernier message: 02/08/2006, 15h32

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