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. #241
    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
    un autre exemple



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


    devrait donné 1+2+3+4+5 =15
    mais si je suis votre raisonnement cela fait soit n'importe quoi soit
    5+5+5+5+5 = 25

  2. #242
    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 Luc Hermitte Voir le message
    Cf le threads C vs C++, quantité de cas y ont été déjà énumérés.
    ok merci

  3. #243
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Mongaulois, les C et le C++ sont des langages differents, mais qui partagent un gros sous-ensemble, tres proche de C89, moins de C99; geres par des commites differents, mais qui partagent un sous-ensemble de membres dont certains sont officiellement charges de la communication entre les comités. Je serais tres etonne d'une disparition proche d'un des deux langages, et meme si le comite du C est moins porte a faire evolue le langage, il continue a le faire, et pas necessairement dans une direction compatible avec le C.0

    Mais j'ai l'impression que ta question est reellement "Pourquoi continuer a faire du C plutot que du C++ puisque le C++ est a toute fin utile un sur-ensemble du C?"

    D'un certain point de vue, je comprends ton interrogation; mais je crois que la reponse depend beaucoup plus du contexte de chacun que tu ne le penses. Etant moi-meme dans un contexte ou la reponse est "Pas de bonnes raisons", j'ai du mal a presenter avec pertinence les autres. Parmi les bonnes raisons parfois applicables:
    - disponibilite: la cible a un compilateur C, pas un compilateur C++
    - stabilite: le C est un langage plus stable que le C++ avec moins de variations entre implementations
    - historique: la base est ecrite en C, il faudrait la migrer a un cout incertain (et il faut migrer non seulement le code, mais aussi les programmateurs) pour un benefice immediat au mieux faible
    - le C++ est un langage trop complique

    Pour les autres, le forum C est un meilleur endroit pour poser la question.

  4. #244
    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
    un autre exemple
    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[i] + tab[++i] + tab[++i] + tab[++i] + tab[++i];

    devrait donné 1+2+3+4+5 =15
    mais si je suis votre raisonnement cela fait soit n'importe quoi soit
    5+5+5+5+5 = 25
    Par exemple, oui.

  5. #245
    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
    Merci pour les explications sur les processeurs . Même si j'ai pas tout compris.


    Une autre question par rapport au struct. Si je ne me trompe pas struct en C++ est une class public.
    du coup
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct A
    {
    int a;
    int b;
    A(){ a=1;b=2;}//constructeur de A
    }
    est valid en C?
    de même, en C un struct peut il avoir une fonction membre??

  6. #246
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il n'y a aucune histoire de constructeur ou de fonction membre en C. Une structure en C ne peut contenir que des données.

  7. #247
    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 doccpu Voir le message
    Quant a :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    int X = ++i * (4*a+b + --i) ;
    le proc ne choisira pas c'est le compilo qui vas le faire et comme les [in/dé]crementation ont le rang le plus fort c'est elles qui vont etre executé en premier, pus viendrons les indexations "[]", les parenthèses, les operations logiques, les puissances, les multiplications/divisions et enfin les additions/soustractions, le tout dans l'ordre de priorité et de lecture.

    on aura don dans l'ordre d'execution

    ++i
    --i
    4*a
    (4*a)+b+(i)
    (i)*((4*a)+b+(i))
    x = ((i)*((4*a)+b+(i)))
    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.

  8. #248
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    "Il n'y a aucune histoire de constructeur ou de fonction membre en C. Une structure en C ne peut contenir que des données."

    ...et des pointeurs de fonctions.

  9. #249
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par ronan99999 Voir le message
    "Il n'y a aucune histoire de constructeur ou de fonction membre en C. Une structure en C ne peut contenir que des données."

    ...et des pointeurs de fonctions.
    Un pointeur est une donnée. Le fait d'utiliser des pointeurs de fonctions pour simuler des fonctions membres n'est qu'une technique particulière.
    Enfin bref on ne va pas commencer à pinailler, c'était juste une petite parenthèse.

  10. #250
    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
    Par exemple, oui.
    et celui la aussi, du coup?
    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);

  11. #251
    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 Mongaulois Voir le message
    Merci pour les explications sur les processeurs . Même si j'ai pas tout compris.
    J'ai pas releve toutes les erreurs dans ce qu'il a ecrit, en particulier dans ce qui ne concerne pas le C++. doccpu a tendance a prendre le cas particulier qu'il a devant lui pour une generalite.


    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct A
    {
    int a;
    int b;
    A(){ a=1;b=2;}//constructeur de A
    }
    est valid en C?
    Non. pas de constructeur ni de fonctions membres (virtuelles ou non) en C. (Accessoirement, pas de commentaires commencant par // en C89).

    Citation Envoyé par Mongaulois Voir le message
    et celui la aussi, du coup?
    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);
    Ca ne compile ni en C ni en C++. Ca compilerait (par exemple en assignant tab a un pointeur sur int) que ce serait un comportement indefini (modifie plus d'une fois sans point de sequencement entre).

  12. #252
    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 Jean-Marc.Bourguet Voir le message
    Ca ne compile ni en C ni en C++. Ca compilerait (par exemple en assignant tab a un pointeur sur int) que ce serait un comportement indefini (modifie plus d'une fois sans point de sequencement entre).
    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

  13. #253
    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
    Nn, ça ne compile pas car tu n'a pas le droit de modifier tab. Tu peux modieir les valeurs pointées, mais pas le pointeur lui-même.

  14. #254
    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
    Nn, ça ne compile pas car tu n'a pas le droit de modifier tab. Tu peux modieir les valeurs pointées, mais pas le pointeur lui-même.
    ah ok, pour :
    int tab[] : tab != int *
    int tab[9] : tab != int *


    J'utilise jamais cette écriture, mais je pensez que c'était pareil...

    Un autre question const existe en C ?

  15. #255
    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 Mongaulois Voir le message
    Cela compilerai ou y as un truc qui m'échappe?
    Ca compile pas. tab est un tableau. Dans ce contexte il est converti implicitement en un pointeur qui est une rvalue, et ++ ne s'applique pas aux rvalues. Quelque chose de quasiment equivalent (mais avec une conversion explicite) et donc qui ne compile pas plus est:


  16. #256
    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 Mongaulois Voir le message
    Un autre question const existe en C ?
    Oui. Il y a de subtiles differences entre le C et le C++ sur ce point.

  17. #257
    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
    un autre problème

    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:
    B m_b;
    C m_c;
    int m_a;
    }
    vue que m_c s'initialise avec m_b,
    es que ce code a un comportement indéfinie?

  18. #258
    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 Jean-Marc.Bourguet Voir le message
    Oui. Il y a de subtiles differences entre le C et le C++ sur ce point.
    Comme quoi?
    const = constant.
    Je ne voie pas trop en quoi il peut y avoir une différence..
    merci

  19. #259
    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 Mongaulois Voir le message
    Comme quoi?
    const = constant.
    Je ne voie pas trop en quoi il peut y avoir une différence..
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int const size = 10;
    int const val = size*2;
    int f();
    int const val2 = f();
     
    int f()
    {
        int tab[size];
        return 42;
    }
    Est du code valide en C++, contient 3 erreurs en C (val, val2, tab).

  20. #260
    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
    un autre problème

    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:
    B m_b;
    C m_c;
    int m_a;
    }
    vue que m_c s'initialise avec m_b,
    es que ce code a un comportement indéfinie?
    L'initialisation s'effectue dans l'ordre de déclaration des variables dans la classe.

+ 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