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

Affichage des résultats du sondage: Au finale, pour vous, faut-il

Votants
124. Vous ne pouvez pas participer à ce sondage.
  • séparer le C et le C++

    54 43,55%
  • les unir

    10 8,06%
  • les unir mais savoir différencier les deux "styles de programmation"

    42 33,87%
  • non mais t'as rien compris

    25 20,16%
Sondage à choix multiple
C++ Discussion :

C et C++ mythe et realité


Sujet :

C++

  1. #201
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( fonctiona()  || fonctionb()   &&  fonctionc())

    pour moi, l'ordre des appels (s'ils sont nécessaire bien sur) est fonctiona(),fonctionb() puis fonctionC().
    Et non fonctionb(), fonctionC() puis fonctiona() comme tu le propose.
    Les deux appèls sont valables en algèbre booléenne (ainsi que fonctionC(), fonctionb() puis fonctiona()), mais si le C/C++ va bien de gauche à droite j'ai raison .

  2. #202
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    En fait, je me suis peut être mal exprimé...

    Tu peux tourner les choses dans le sens que tu veux (en algebre Booléenne):
    a+bc <==> bc+a

    Comme la norme précise que la première expression est testée en premier, tu aura plutôt
    • fonctiona() appelée en premier
    • si fonctiona() donne vrai ==> fonctionb() et fonctionc() ne sont pas appelées
    • si fonctiona() donne faux ==>fonctionb() est appelée et fonction c ne sera appelée que si fonctionb() donne vrai

    et bien sur, tu rentre dans le bloc "vrai" dans l'un des deux cas:
    • fonctiona() donne vrai (les deux autres non testées)
    • fonctiona() donne faux (fonctionb() et fonctionc() testées et donnent vrai)

    Bref, tu as deux chances sur trois que fonctionc() ne soit jamais appelée et une chance sur trois pour que ni fonctionb() ni fonctionc() ne soient appelées...

    Si tu comptais sur les effets de bord d'une de ces deux fonctions, t'es mal barre
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #203
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par screetch Voir le message
    je pense qu'il manque toujours l'info importante!!

    supposons que functiona, functionb et functionc aient des effets de bords, alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(functiona() || functionb() && functionc())
    D'abord functionb() est appelé, si elle renvoie false alors functiona(9 est appelé. Quel que soit le resultat, functionc() n'est pas appelé et son effet de bord non executé!

    ca s'appelle la "lazy evaluation", ca doit pas etre le terme technique mais en tous cas ca parle mieux comme ca : a partir du moment ou tu peux deduire le resultat tu ne lances pas l'evaluation de la suite.
    je connaissait pas le terme.C'est trés pratique pour programmer des condition sur des appels de fonction sont forme "algébrique" plustôt que d'utiliser des if.
    Si C et C++ ne va pas de gauche a droite, j'ai tous faux

  4. #204
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( fonctiona()  || fonctionb()   &&  fonctionc())

    pour moi, l'ordre des appels (s'ils sont nécessaire bien sur) est fonctiona(),fonctionb() puis fonctionC().
    Et non fonctionb(), fonctionC() puis fonctiona() comme tu le propose.
    Les deux appèls sont valables en algèbre booléenne (ainsi que fonctionC(), fonctionb() puis fonctiona()), mais si le C/C++ va bien de gauche à droite j'ai raison .
    L'ordre d'appel des fonctions n'est pas donné, selon les optimisations, il peut être quelconque.

  5. #205
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Me suis trompé dans mes proportions:

    • deux chances sur huit d'entrer dans le bloc "vrai" (2^3==8)
    • six chances sur huit d'entrer dans le bloc "faux"
    • quatre chances sur huit que fonctionb() soit appelée
    • deux chances sur huit que fonctionc() soit appelée
    • quatre chances sur huit que ni fonctionb() ni fonctionc() ne soit appelée
    • Autrement dit, trois chances sur quatre que les effets de bords de toutes les fonctions ne soient pas appliqués
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #206
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Miles Voir le message
    L'ordre d'appel des fonctions n'est pas donné, selon les optimisations, il peut être quelconque.
    ah...ok
    Tu es sur?

    Pourtant je n'ai jamais eu de problème....
    Je vais plus le faire alors....

  7. #207
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Certain, malheureusement. C'est pour ça aussi que les fonctions avec effet de bord sont à proscrire, surtout dans les expressions logiques

  8. #208
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    ah...ok
    Tu es sur?

    Pourtant je n'ai jamais eu de problème....
    Je vais plus le faire alors....
    Jean-Marc vient de confirmer que c'est garanti par la norme
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #209
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Jean-Marc vient de confirmer que c'est garanti par la norme
    que c'est de gauche a droite?

  10. #210
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Miles Voir le message
    Certain, malheureusement. C'est pour ça aussi que les fonctions avec effet de bord sont à proscrire, surtout dans les expressions logiques
    Est-ce moi qui ai mal compris ce qu'écrit Jean-Marc, ou toi ca commence à m'inquiéter, tout cela
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #211
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Je confirme encore. Dans l'exemple ci-dessus: fonctiona est appelee puis fonctionb puis fonctionc si necessaire a chaque fois.

    Ce n'est pas de l'evaluation paresseuse (qui designe autre chose qui n'est pas disponible en C ni en C++ sans se palucher soi-meme une implementation ou en trouver une deja faite), mais de l'evaluation court-circuit (short-circuit, je ne l'ai jamais entendu qu'en anglais)

    (A reflechir, on peut peut-etre considerer cela comme un cas tres particulier d'evaluation paresseuse.)

  12. #212
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    D'accord, c'est testé de la gauche vers la droite, mais le compilateur peut à la limite évaluer la deuxième fonction en avance, non ?

  13. #213
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    http://www.codepedia.com/1/ShortCircuitEval
    ca va je pense que je peut continuer.

  14. #214
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pour une fois qu'on est sûr que c'est bien dans l'ordre
    Merci pour le lien

  15. #215
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Miles Voir le message
    D'accord, c'est testé de la gauche vers la droite, mais le compilateur peut à la limite évaluer la deuxième fonction en avance, non ?
    Ca, ca dépend sans doute, entre autre, du processeur: ceux qui peuvent effectuer un traitement prédictif ou non, et, de toutes manières, d'une fonction à effet de bord vs fonction constante... Toujours à moins que la norme ne dise autre chose
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  16. #216
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Ca, ca dépend sans doute, entre autre, du processeur: ceux qui peuvent effectuer un traitement prédictif ou non, et, de toutes manières, d'une fonction à effet de bord vs fonction constante... Toujours à moins que la norme ne dise autre chose
    Mais euh.....

  17. #217
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Une autre question,

    va_list, Va_start, va_arg et va_end (pour les fonction a variable multiple) c'est du C ou C++ ???
    http://www.cplusplus.com/reference/clibrary/cstdarg/

    Si c'est du C comment doit on faire en C++ ??

  18. #218
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est du C, en C++, vaut mieux éviter et prendre un conteneur à la place

  19. #219
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Miles Voir le message
    D'accord, c'est testé de la gauche vers la droite, mais le compilateur peut à la limite évaluer la deuxième fonction en avance, non ?
    Non. Les fonctions dont on n'a pas besoin ne doivent pas etre evaluees.

    (Mais il y a toujours la regle qui dit que tout est possible si ce n'est pas observable).

  20. #220
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Mais euh.....
    J'explique:

    Les dernières évolutions permettent de faire un traitement prédictif:

    Cela signifie que, quand ils arrivent à un saut conditionnel(ce que l'on pourrait représenter par un je, jne ou autre), il peuvent "aller voir ce qui les attend" apres cette jonction, et profiter d'un certain temps pour s'avancer dans une tache.

    L'avantage, c'est que, s'ils ont choisi de traiter "la bonne réponse", ils peuvent valider ce qu'ils ont fait, et on a gagné du temps

    L'inconvénient, c'est que, s'ils ont choisi de traiter la mauvaise réponse, ils devront commencer par "revenir en arrière"... et donc de perdre un peu de temps

    L'explication n'est sûrement pas tout à fait juste, mais on dira que le principe y est

    On a déjà vu que le processeur faisait certaines optimisations qu'il arrivait à déduire des commandes et fonctions qu'il rencontre:
    Le coup du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main()
    {
        int j=0;
        for(int i=0;i<10;i++)
            j++;
        return 0;
    }
    est dans toutes les mémoires

    De là à dire que, s'il peut déduire une valeur renvoyée, à un moment donné, par une fonction... "yakunpas" (peut être un peu vite franchi )

    [EDIT]beaucoup trop vite franchi, le pas
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Mythes & Réalité
    Par philben dans le forum Contribuez
    Réponses: 6
    Dernier message: 07/07/2006, 07h05
  2. [TV] Emission Télé Réalité(encore)
    Par ArHacKnIdE dans le forum Films & TV
    Réponses: 30
    Dernier message: 31/05/2006, 11h47
  3. Liste deroulante et VALUE non conforme a la realité
    Par ahage4x4 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 27/05/2005, 13h33
  4. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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