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. #261
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Miles Voir le message
    L'initialisation s'effectue dans l'ordre de déclaration des variables dans la classe.
    donc
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class A
    {
    public:
    A(int a,B b): m_a(a),m_b(b),m_c(m_b) {}
     
    private:
    C m_c;
    B m_b;
    int m_a;
    }
    m_c sera initilaiser avant m_b ?? et ne va donc pas faire correctement l'initialisation de A?

  2. #262
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Hé bien, personnellement, je ne suis absolument pas convaincu qu'il y ai la moindre différence entre les deux du point de vue de la rapidité.
    Du point de vue de la "propreté", j'aurais tendance à préférer l'écriture "verbeuse" (!=0 ou !=NULL)...Mais ce n'est que mon avis

    Le fait est que, de toute facon, il y aura d'office un cmp suivi du JE/JNE que tu mette ou non le !=0/!=NULL...
    dans ton cas il attaque la memoire pour savoir si il est egal a la constante non nomé 0 dans l'autre il ne le fait pas.

    mais comme tu l'a dit ca peux aider les débutant et comme ca change rien au shmilblic faites ce que vous prefferez

  3. #263
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    N'importe quoi.

    Deux modifications de i sans points de sequencement entre, comportement indefini. Et a nouveau ce n'est pas parce que votre compilateur sur un exemple donne fait ce que vous pensez qu'un autre compilateur (ou une version differente du meme, ou le meme avec des options differentes) va faire la meme chose.
    trouve moi un compilateur qui fait diférement et on parlera !

  4. #264
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par doccpu Voir le message
    trouve moi un compilateur qui fait diférement et on parlera !
    En voici deux: gcc sur Alpha, xlC sur AIX (voir l'autre thread).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #265
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    en récrivant correctement le code (dsl j'ai ecrit un peu vite)

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int tab[] = {1,2,3,4,5,6,7,8,9};
    int id =0;
     
    int somme = (*tab) + 4*(*(++tab)) + 10*(*(++tab)) + 5*(*(++tab)) + (*(++tab));
    Cela compilerai ou y as un truc qui m'échappe?
    Par contre,merci pour le comportement indéfini, j'ai compris le truc
    là tu fait compliqué pour faire simple :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int tab[] = {1,2,3,4,5,6,7,8,9};
    int somme = 0;
     
    for(int i = 0; i < 9, i++)
    {
        somme += tab[i];
    }

    ou si tu veux faitre plus complexe puisque apparement tu aime ça:

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int tab[] = {1,2,3,4,5,6,7,8,9};
    int somme = 0;
    int i = 0;
    while(i < 9)
    {
        somme += tab[i++];
    }

  6. #266
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    En voici deux: gcc sur Alpha, xlC sur AIX (voir l'autre thread).
    Je doute que GCC (même sous alpha) ai un comportement différent de GCC sous windows et de GCC sous linux (Alpha ? c Quoi ça un système de galaxie ? on parle de PC sous windows et linux (voire peut être mac OS X))

    Tu connais beaucoup de personnes qui disposent d'un serveur AIX ? vu le prix de la licence ça m'étonnerais que quelqu'un qui apprend ai les moyens de se la payer !

    alors bravo t'a sorti un exemple que je peux pas mettre en doute donc ce que je disait est toujours valable comme le commun du mortel chez les développeurs ne pourrons jamais se payer AIX c'est pas la peine d'en parler et si il y font référence alors la tu pourra sortir les cas exceptionnels qui seront alors pertinents. en attendant tu laisse les jeunes apprendre le cas général : en apprentissage le détail est incompréhensible et le cas général est inexploitable donc il faut apprendre a faire des compromis.

  7. #267
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par doccpu Voir le message
    Je doute que GCC (même sous alpha) ai un comportement différent de GCC sous windows et de GCC sous linux (Alpha ? c Quoi ça un système de galaxie ? on parle de PC sous windows et linux (voire peut être mac OS X))
    Tu n'as jamais entendu parlé des Alpha ??
    En tout cas, c'est explicite, comme je l'ai déjà dit, dans les warnings d'ICC, il indique clairement que l'ordre n'est pas garanti.

  8. #268
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Je doute que GCC (même sous alpha) ai un comportement différent de GCC sous windows et de GCC sous linux
    Tu prends un compte sur freeshell.org et tu testes toi-meme.

    Citation Envoyé par doccpu Voir le message
    Tu connais beaucoup de personnes qui disposent d'un serveur AIX ?
    AIX c'est toi qui l'a cite le premier: http://www.developpez.net/forums/sho...7&postcount=35, ce qui m'a incite a aller voir ce qui se passait dessus.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  9. #269
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par doccpu Voir le message
    alors bravo t'a sorti un exemple que je peux pas mettre en doute donc ce que je disait est toujours valable comme le commun du mortel chez les développeurs ne pourrons jamais se payer AIX c'est pas la peine d'en parler et si il y font référence alors la tu pourra sortir les cas exceptionnels qui seront alors pertinents. en attendant tu laisse les jeunes apprendre le cas général : en apprentissage le détail est incompréhensible et le cas général est inexploitable donc il faut apprendre a faire des compromis.

    On est sur un débat où les gens postent sont professionels (en tout cas, non débutant) (voir la règle des débats en général : ici). Ceci n'est pas un cours, je ne vois pas pourquoi tu dis ça.
    Je ne répondrai à aucune question technique en privé

  10. #270
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par doccpu Voir le message
    alors bravo t'a sorti un exemple que je peux pas mettre en doute donc ce que je disait est toujours valable comme le commun du mortel chez les développeurs ne pourrons jamais se payer AIX c'est pas la peine d'en parler et si il y font référence alors la tu pourra sortir les cas exceptionnels qui seront alors pertinents. en attendant tu laisse les jeunes apprendre le cas général : en apprentissage le détail est incompréhensible et le cas général est inexploitable donc il faut apprendre a faire des compromis.
    La premiere regle a apprendre pour la programmation en C et en C++, c'est que l'experience ne suffit pas pour savoir ce que fait quelque chose.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  11. #271
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par millie Voir le message
    Ceci n'est pas un cours, je ne vois pas pourquoi tu dis ça.
    Meme pour un cours, conseiller de se fier a l'experimentation pour apprendre le C et le C++ est un tres mauvais conseil.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  12. #272
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Meme pour un cours, conseiller de se fier a l'experimentation pour apprendre le C et le C++ est un tres mauvais conseil.
    il n'y a que deux moyens pour faire progresser la science :

    -soit l'expérience conduit a la théorie,
    -soit la théorie conduit a l'expérience.

    Emanuel Kant

    de toute façon il faut passer par l'experience donc autant comencer tot !

  13. #273
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 370
    Points : 41 523
    Points
    41 523
    Par défaut
    Le problème, c'est qu'il ne faut pas tenter de déduire la norme de l'expérience : C'est là que les comportements indéfinis interviennent.

    Expérience de ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void TestArray2(void)
    {
    	int tab[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    	size_t i = 0;
    	int res1 = tab[++i] + tab[++i] + tab[++i] + tab[++i] + tab[++i];
     
    	i = 0;
    	int res2 = tab[i++] + tab[i++] + tab[i++] + tab[i++] + tab[i++];
    	printf("resultat 1: %d - resultat 2: %d\n", res1, res2);
    }
    • Sous Visual Studio 2005, ça donne ceci:
      Code X : Sélectionner tout - Visualiser dans une fenêtre à part
      resultat 1: 30 - resultat 2: 5
    • Sur un autre compilo, ça donnerait sûrement autre chose.
      • Edit: rod vient d'obtenir 21 et 5 sur gcc 3.4.2.
    • Sur une DS9K, ça peut lancer une attaque nucléaire sur le Mouchenculstan septentrional.

    Et ce, avec la bénédiction de la norme.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #274
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    avec gcc 3.4.2, j'obtiens 21 - 5
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  15. #275
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 370
    Points : 41 523
    Points
    41 523
    Par défaut
    Citation Envoyé par r0d Voir le message
    avec gcc 3.4.2, j'obtiens 21 - 5
    2+3+4+5+6 = 21 --> gcc applique l'effet de bord de ++i au fur et à mesure.
    Ce comportement est tout aussi permis par la norme que celui de Visual.
    Edit: Grosse connerie dans ce post, 2+3+4+5+6 = 20...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #276
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Miles Voir le message
    L'initialisation s'effectue dans l'ordre de déclaration des variables dans la classe.
    donc
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class A
    {
    public:
    A(int a,B b): m_a(a),m_b(b),m_c(m_b) {}
     
    private:
    C m_c;
    B m_b;
    int m_a;
    }
    m_c sera initilaiser avant m_b ?? et ne va donc pas faire correctement l'initialisation de A?

    (dsl si je réécrit ma question)

  17. #277
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 370
    Points : 41 523
    Points
    41 523
    Par défaut
    Mongaulois : Oui.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #278
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    En voici deux: gcc sur Alpha, xlC sur AIX (voir l'autre thread).
    non c'est toi qui a cité AIX
    Dernière modification par millie ; 06/09/2007 à 16h31. Motif: pas de SMS

  19. #279
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par doccpu Voir le message
    non c'est toi qui a cité AIX
    Dans le message 36, tu l'avais fait dans le message 35...
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  20. #280
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par doccpu Voir le message
    Citation Envoyé par koala01
    Hé bien, personnellement, je ne suis absolument pas convaincu qu'il y ai la moindre différence entre les deux du point de vue de la rapidité.
    Du point de vue de la "propreté", j'aurais tendance à préférer l'écriture "verbeuse" (!=0 ou !=NULL)...Mais ce n'est que mon avis

    Le fait est que, de toute facon, il y aura d'office un cmp suivi du JE/JNE que tu mette ou non le !=0/!=NULL...


    dans ton cas il attaque la memoire pour savoir si il est egal a la constante non nomé 0 dans l'autre il ne le fait pas.

    mais comme tu l'a dit ca peux aider les débutant et comme ca change rien au shmilblic faites ce que vous prefferez

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // compare la valeur de p avec  0
    if (p!=0 && p->blablabla())
    et
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //compare la valeur p pour savoir si il correspond a vrai ou faux 
    //=>compare la valeur de p avec  0
    if (p && p->blablabla())


    c'est strictement la même chose

+ 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