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. #221
    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
    Une autre question,

    va_list, Va_start, va_arg et va_end (pour les fonction a variable multiple) c'est du C ou C++ ???
    J'ai envie de repondre oui.

    C'est du C et du C++, mais generalement en C++ on evite (une technique est de chainer des appels, comme ce qui est fait dans les streams).

  2. #222
    screetch
    Invité(e)
    Par défaut
    Tout le monde n'est pas fan des streams, je reste fan du printf.

    Vas y pour localiser des messages donnés a cout

  3. #223
    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 screetch Voir le message
    Tout le monde n'est pas fan des streams, je reste fan du printf.

    Vas y pour localiser des messages donnés a cout
    Vas-y pour passer un UDT a printf. Meme une std::string.

    On peut preferer un systeme de formatage avec format (je fais tellement peu d'IO que je n'ai pas d'opinion informee), mais ce n'est pas une raison pour preferer une interface non extensible et non sure: les deux ne sont pas lies.

  4. #224
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    D'après Efficient C++, dans l'expression if (e1 || e2) tirée de la partie Speed Up the Common Path semble exclure que e2 puisse être évaluée en premier.

    Et que penser des : if ( p && p->somebool() ) que je suis sûr d'avoir vu récement dans un autre livre ?

  5. #225
    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 NiamorH Voir le message
    D'après Efficient C++, dans l'expression if (e1 || e2) tirée de la partie Speed Up the Common Path semble exclure que e2 puisse être évaluée en premier.

    Et que penser des : if ( p && p->somebool() ) que je suis sûr d'avoir vu récement dans un autre livre ?
    idem
    si p == 0 alors on ne fait pas p->somebool().
    je trouve plus propre et lisible que
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (p!=0)
    {
     if(p->somebool())
    {
    }
    }

  6. #226
    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
    Oui, c'est comme ça.
    Le deuxième exemple s'appuie là-dessus, comme expliqué plus haut. Si p est nul, il n'est pas possible d'appeler une méthode dessus, il y aurait un segfault ou qqch du genre.

  7. #227
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Je crois que vous vous embaler un peu...
    Les évaluations d'expression sont normalisées (encore heureux), ce qui ne l'est pas c'est l'ordre dans lequel les paramètres d'un appel de fonction le sont.

    Oui :
    Non:
    MAT.

  8. #228
    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 Mat007 Voir le message
    Les évaluations d'expression sont normalisées (encore heureux), ce qui ne l'est pas c'est l'ordre dans lequel les paramètres d'un appel de fonction le sont.
    Ce n'est pas une question d'ordre d'évaluation (ce qui voudrait dire que
    signifie ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    t1=++i;
    t2=--i;
    f(t1, t2);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    t2=--i;
    t1=++i;
    f(t1, t2);
    ) mais d'absence de point de séquencement entre les deux expressions ++i et --i qui rend l'ensemble indéfini. Donc un appel à abort() est autorisé.

    A un point de séquencement avec &&.

  9. #229
    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
    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
    Re mais .... euh.

    Je comprend de quoi tu parle, mais si le langage certifie qu'il fait du Short Circuit Evaluationl je ne pense que le proc va faire n'importe quoi. par exemple
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (p!=0 && p->blablabla()) 
    {
    ...
    }
    Je ne pense pas qu'il va faire p->blablabla() avant p!=0.
    Ce qui ferai un blablabla() -> ta gueule (dsl c'est juste un clin d'oeil )
    Par contre
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    int X = ++i * (4*a+b + --i) ;
    le proc peut choisir de faire --i avant le ++i

  10. #230
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    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 288
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    je n'ai pas programmé en C (pur) depuis mon avant-dernière vie, et je me demandais:
    Pouvez-vous me donner quelques exemples de code qui fonctionne en C mais pas en C++?


  11. #231
    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 r0d Voir le message
    Bonjour à tous,

    je n'ai pas programmé en C (pur) depuis mon avant-dernière vie, et je me demandais:
    Pouvez-vous me donner quelques exemples de code qui fonctionne en C mais pas en C++?

    Il n'y a pas tant que ca. Le plus courant doit etre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int *ptr = malloc(10*sizeof int);
    (en C++ il faut un cast pour passer de void* a un autre type de pointeur, en C pas).
    Il y a aussi l'utilisation des mots cles du C++ comme identificateur, et une bonne partie de ce qui vient de C99. Il y a aussi quelques differences silentieuses (deux qui me viennent en tete, en C sizeof('a') == sizeof(int), en C++ sizeof('a') == 1; inline a un sens plus ou moins subtilement different en C et en C++).

  12. #232
    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
    Il n'y a pas tant que ca. Le plus courant doit etre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int *ptr = malloc(10*sizeof int);
    (en C++ il faut un cast pour passer de void* a un autre type de pointeur, en C pas).
    Il y a aussi l'utilisation des mots cles du C++ comme identificateur, et une bonne partie de ce qui vient de C99. Il y a aussi quelques differences silentieuses (deux qui me viennent en tete, en C sizeof('a') == sizeof(int), en C++ sizeof('a') == 1; inline a un sens plus ou moins subtilement different en C et en C++).
    Pourquoi vouloir les séparer alors?

  13. #233
    Membre éclairé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Pourquoi vouloir les séparer alors?
    Parce que si l'on programme bien en C++, on se retrouve à ne plus du tout utiliser les même méthodes qu'en C à part les bases impérative communes.

    Les langages sont semblables dans une certaine mesure, leur utilisation beaucoup moins.

  14. #234
    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
    Pourquoi vouloir les séparer alors?
    Ils sont séparés depuis plus de vingt ans. Ils ont une influence l'un sur l'autre. Certains -- dont moi -- aimeraient que le C soit aussi proche que possible d'un sous ensemble bien défini du C++ et sont prêts à des concessions sur la rigueur du langage C++ pour ça, mais le C n'a jamais été un sous-ensemble strict même si on exclu les mots clés. Mais il est des gens qui pensent l'inverse, que le C ne doit pas tenir compte du C++ lors de son évolution, que le C++ ne doit pas considérer la compatibilité avec le C comme un objectif et donc importer les nouveautés du C ou tenir compte du C plus généralement.

  15. #235
    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
    Ils sont séparés depuis plus de vingt ans. Ils ont une influence l'un sur l'autre. Certains -- dont moi -- aimeraient que le C soit aussi proche que possible d'un sous ensemble bien défini du C++ et sont prêts à des concessions sur la rigueur du langage C++ pour ça, mais le C n'a jamais été un sous-ensemble strict même si on exclu les mots clés. Mais il est des gens qui pensent l'inverse, que le C ne doit pas tenir compte du C++ lors de son évolution, que le C++ ne doit pas considérer la compatibilité avec le C comme un objectif et donc importer les nouveautés du C ou tenir compte du C plus généralement.
    Pour moi, la différence entre le C et le C++ est le "style de programmation". Je les trouvent trop proche pour être réellement séparable.
    La preuve, à la simple question donné un exemple en C qui n'est pas valide en C++? y as pas beaucoup réponse (dizaine de cas peut être).
    Au contraire, je trouve que cela complique les choses de les séparer. On se retrouve avec deux langages, dont un (le C++), un peu plus puissant, dans le sens où il peut (quasiment) faire la même chose que l'autre (le C), tout en en faisant d'autre à coté.

    Après je veut pas critiquer les raisons historique de leurs différences, j'en serait incapable. Mais de nos jours, je ne voit pas l'utilité de vouloir encore les séparer, même si apparemment leurs unions n'arrivera jamais...
    Ce qui créé des confusions "le code que j'ai écrit c'est du C ou du C++?" et souvent, la réponse est ... les deux.
    Un autre exemple avec la SDL :
    SDL is written in C, but works with C++ natively

    Faudrait peut être créer un nouveau langage le ++C

  16. #236
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Citation Envoyé par r0d Voir le message
    Pouvez-vous me donner quelques exemples de code qui fonctionne en C mais pas en C++?
    Cf le threads C vs C++, quantité de cas y ont été déjà énumérés.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  17. #237
    doccpu
    Invité(e)
    Par défaut
    bon les gars la je crois qu'il à des enculeur d'anophèles qui cherchent à mystifier le comportement du cpu sous prétexte que le pipeline du cpu est capable de traitement prédictif ou de pipeline sur biproc ect....

    1) le seul composent a evaluer une opération booleene est le core d'un processeur donné pour un thread donné. Donc il n'y a pas de possibilité de plantage a cause d'une mauvaise évaluation du pipeline est exclu. de plus le pipeline ne stoque pas plus de 4 opérations assembleur (1 instruction = 1 operateur booleen en ce qui concerne les tests).

    2) le pipeline ne vas chercher que jusque à 4 instruction et si le processeur lui dit qu'il s'est planté alors il vas rechercher le bon code en mémoire avant d'envoyer le code au processeur (ce qui lui fais perdre 4 cycles)

    3) si un processeur modifie une donnée partagé entre 2 core un mécanisme d'avertissement des pipelines entre en jeux et les caches ainsi que la mémoire sont remis a jours automatiquement ce qui fais perdre plusieurs cycles aux processeurs (min 4 mais la mise a jour de la mémoire peux prendre plus).

    4)Quant aux caches de premiers et second niveaux ils sont soumis aux mêmes règles et mécanismes de protections que les pipelines

    enfin les pipelines ont été mis en place a partir du 386 alors ne vous d'inquietez pas trop parce qu'intel et amd savent très bien ce qu'ils fonts et ils se sont arrengé pour que les gents qui ont appris l'assembleur ne soient pas trop dépaysé. c'est pas comme microsoft qui change ses api a chaque révision de son os.

    je vous concède que les docs d'intel en la matières sont pas facile a trouver mais une recherche sur les forums et le site d'intel avec les mots clé "datasheet" et "Intel® 64 and IA-32 Architectures Software Developer’s Manual" vous permettrons de retrouver les informations justes sur le comportement des proceseurs IA-32 et IA-64

    cordiallement

    a l'attention des enculeurs d'anophèles : ce que j'ai ecrit ci dessus est une simplification du fonctionnement plus complèxe encore des systèmes de sécurités alors ne venez pas me dire que j'ai comis une faute de précision ou que je suis resté trop vague c'est voulu. svp merci.

  18. #238
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Re mais .... euh.

    Je comprend de quoi tu parle, mais si le langage certifie qu'il fait du Short Circuit Evaluationl je ne pense que le proc va faire n'importe quoi. par exemple
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (p!=0 && p->blablabla()) 
    {
    ...
    }
    Je ne pense pas qu'il va faire p->blablabla() avant p!=0.
    Ce qui ferai un blablabla() -> ta gueule (dsl c'est juste un clin d'oeil )
    Par contre
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    int X = ++i * (4*a+b + --i) ;
    le proc peut choisir de faire --i avant le ++i

    Pour ce code :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (p!=0 && p->blablabla()) 
    {
    ...
    }
    je peux te certifier qu'il ne fera pas p->blablabla() avant d'etre sur que p est bien different de 0. mais je préfère l'implémentation :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (p && p->blablabla()) 
    {
    ...
    }

    qui est plus propre et plus rapide a évaluer par le processeur une fois compilé.

    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)))

  19. #239
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par doccpu Voir le message
    (snip)
    mais je préfère l'implémentation :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (p && p->blablabla()) 
    {
    ...
    }

    qui est plus propre et plus rapide a évaluer par le processeur une fois compilé.
    (snip)
    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...
    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