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

Langages de programmation Discussion :

C ou C++ ? Lequel choisir ?


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    alex_pi
    Invité(e)
    Par défaut
    Tiens, je reviens ici avec un nouveau morceau de troll : Il ne FAUT PAS coder en C !

    J'ai un peu regardé une technique de test de programmes ammusante, le fuzzing qui consiste globalement à donner des entrées moisis à un programme et à regarder comment il réagit. J'ai écris un petit "bit flip", qui prend un fichier sein, permute des bits au pifomètre, et le donne en entrée au programme à tester. En moins d'une heure de test (test full automatique, donc ça me prend pas de temps...), j'ai produit un .class qui fait crasher la machine virtuelle GNU sur signal 11, un fichier pdf qui fait pareil avec acrobat reader (le 8.blah, pas le 9, mais je n'ai pas pu le tester pour de vrai). Bon, soyons honnete, la JVM de sun a résisté.
    Avec l'outil Mangleme, je produit facilement un .html qui fait crasher firefox3 sous kubuntu (pas sous d'autres distribs, je sais pas bien pourquoi), et amaya, le browser du W3C s'envoie dans les roses à chaque fois.

    Bref, le C est un langage completement dépassé, qui est la cause de plus de 90% des failles de sécurités trouvées puisque les buffer-overflow y sont légions.
    Donc si le choix c'est C++ ou C, prend le C++ en utilisant les vectors qui vérifient les bornes des tableaux !.
    Bon après je vous rassure hein, un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    
    
    main(int argc, char *argv[]){
      if(argc>1)
        printf(argv[1]);
      return(0);
    }
    continuera un représenter un problème de sécurité, même en C++...

    Codez en autre chose, vous couterez moins cher à la société :-)

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Mars 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Mars 2009
    Messages : 94
    Par défaut Une vision différente
    Salut,

    Citation Envoyé par Luc Hermitte Voir le message
    D'un point de vue pédagogique, entre le C et le C++ je conseillerai de commencer par le C++. Sans même parler de notions objets, il propose un niveau d'abstraction supplémentaire.

    Cela permet de retarder l'étude de sujets complexes (comme les pointeurs et ce qui en découle : tableaux et chaines de caractères) et d'en ignorer des totalement inninterressants (syntaxe de printf, scanf).

    Evidemment, le C++ est plus complexe et sa maitrise demandera plus de temps que celle du C ; mais un débutant fera plus de choses avec le C++ qu'avec le C.
    Comme il est dit plus haut, apprendre les 2 permets d'avoir des perspectives beaucoup plus large.
    Cependant, et malgré tout, je dirai d'apprendre le C pour commencer même si le but est d'aller vers le C++. Le C permet d'avoir les bases pour de nombreux langages de programmation et est vraiment très formateur. Par ailleurs, même si le but est le C++, une fois les boucles/conditions etc... apprises en C, c'est un jeu d'enfant de faire cette partie là de l'apprentissage C++. Et concernant les notions de pointeurs et chaines de caractères, apprenre à s'en servir ne prends pas beaucoup plus de temps et mieux, comprendre ces passages là permet de saisir comment ça se passe dans la mémoire de l'ordinateur et donc de comprendre ce que l'on fait et ce que l'on demande vraiment à son ordinateur quand on programme.

    Vouloir apprendre sur le tas, surtout quand on est débutant, est une erreur (vouloir tout de suite faire plus de choses).

    En résumé, commence par le C, en apprenant au moins jusqu'au notions de pointeurs, tableaux de caractères en console. Puis passes au C++ si tu penses que l'orienté objet va te convenir. Le mieux c'est de se fixer un but de premier programme peut-être.

    A mon avis, vouloir tout de suite commencer par de la POO avec les notions d'héritage, de polymorphisme etc... surtout quand on est débutant et que l'on ne sait même pas ce qu'est une condition, c'est vouloir tout de suite passer à la F1 avant même de savoir conduire son vélo sur 2 roues.

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Tu n'as pas compris mon message.
    Commencer par le C++ n'implique pas du tout de commencer par la POO.
    C'est exactement le même principe que celui qui consiste à commencer par un langage adapté aux débutants comme le Pascal ou l'Ada: on fait abstraction de la mémoire pour se concentrer d'abord sur l'algorithmie.

    PS: le modèle de mémoire du C commence à de plus en plus à s'éloigner du fonctionnement de la machine.
    PPS: ne t'arrête pas à la lecture des messages de la première page avant de répondre
    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...

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    PS: le modèle de mémoire du C commence à de plus en plus à s'éloigner du fonctionnement de la machine.
    Euh, que veux-tu dire par là au juste ?

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Que pipelines, mémoire cache, multi-processeurs, les instructions C qui sont réordonnées pour plus d'efficacité, les instructions des processeurs qui sont elles-même des macro-instructions, ... font qu'il y a une couche d'abstraction entre le C et ce qui se passe vraiment.
    Certes le C est un modèle unifié et simplifié des plus proches de la machine. Et alors ?
    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...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut And the Winner is...
    Mes petits gars, écoutez la parole d'un développeur qui il y a 20ans faisait du C, et il y a 10 du C++:
    Il n'y a pas de phénomènes de modes. Tous les ans ont voit apparaître des langages qui essayent de nouveaux concepts. Mais tous les 10 ans on voit apparaître une synthèse qui incorpore tous les concepts intéressants d'une époque. Il y a eu le C, une synthèse. Il y a eu le C++, un (bel) essai.
    Quand on développe il faut être à la fois à la pointe des nouveaux concepts et au milieu du courant.
    Désolé, mais ce qui est le plus riche intellectuellement et au milieu du courant, aujourd'hui, c'est JAVA.

  7. #7
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par novatronics Voir le message
    Quand on développe il faut être à la fois à la pointe des nouveaux concepts et au milieu du courant.
    Désolé, mais ce qui est le plus riche intellectuellement et au milieu du courant, aujourd'hui, c'est JAVA.


    intellectuellement parlant, tu peux détailler tes "avantages" pour Java dans le débat Java vs C++ ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  8. #8
    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 gorgonite Voir le message
    intellectuellement parlant, tu peux détailler tes "avantages" pour Java dans le débat Java vs C++ ?
    Il peut les donner dans le débat C++/Java juste à côté (http://www.developpez.net/forums/d18...t-cpp-vs-java/)

  9. #9
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Il peut les donner dans le débat C++/Java juste à côté (http://www.developpez.net/forums/d18...t-cpp-vs-java/)
    c'est ce que j'ai dit, non ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  10. #10
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par novatronics Voir le message
    Mes petits gars, écoutez la parole d'un développeur qui il y a 20ans faisait du C, et il y a 10 du C++:
    Il n'y a pas de phénomènes de modes. Tous les ans ont voit apparaître des langages qui essayent de nouveaux concepts. Mais tous les 10 ans on voit apparaître une synthèse qui incorpore tous les concepts intéressants d'une époque. Il y a eu le C, une synthèse. Il y a eu le C++, un (bel) essai.
    Quand on développe il faut être à la fois à la pointe des nouveaux concepts et au milieu du courant.
    Désolé, mais ce qui est le plus riche intellectuellement et au milieu du courant, aujourd'hui, c'est JAVA.
    Et ben mon petit gars, tu passes à côté d'énormément de choses.
    Niveau richesse intellectuelle, tu trouveras plus dans OCaml, Haskell, Python ou Ruby que Java

  11. #11
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Alp Voir le message
    Niveau richesse intellectuelle, tu trouveras plus dans OCaml, Haskell, Python ou Ruby que Java
    Je joues un peu l'avocat du diable, car j'aime bien Python, mais peux-tu détailler ce que Python ou Ruby ont en plus que Java du point de vue de ce que vous appelez la "richesse intellectuelle"? (peut-être ici: http://www.developpez.net/forums/d70...pourquoi-java/)

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  12. #12
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Ils proposent des paradigmes supplémentaires ?
    Au moins, des fonctionnalités supplémentaires. J'ai l'impression que notre ami passe à côté par exemple de tout ce qui concerne le paradigme fonctionnel, que Ruby utilise un peu, et Python très peu, si je ne m'abuse.

    Enfin, s'il veut du vrai nouveau, c'est du côté de OCaml et Haskell qu'il faut regarder AMHA.

  13. #13
    Membre actif
    Avatar de daniel06600
    Homme Profil pro
    Ingénieur Temps Réel, Android, Windows et Linux
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Temps Réel, Android, Windows et Linux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Billets dans le blog
    1
    Par défaut
    En 2009, le C++ est un echec. Alors que le C est toujours d'actualité

  14. #14
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Citation Envoyé par daniel06600 Voir le message
    En 2009, le C++ est un echec. Alors que le C est toujours d'actualité
    ah ?



    Quelles sont tes sources ?

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut


    Je vois que, malgré ce que j'entend souvent sur ce forum, je ne fais pas encore, et de loin, partie des dinosaures....

    C étant juste derrière Java..

    Ceci dit, C++ est quand même sur une pente un peu descendante..Quoiqu'elle est l'air de se stabiliser..

  16. #16
    Invité
    Invité(e)
    Par défaut
    La distinction C et C++ est parfois un peu artificielle... Les compilateurs et outils de développement sont souvent les mêmes, et un certain nombre de programmes "C++" sont en fait du C étendu, utilisant des bibliothèques du C++, et quelques nouveautés du langage.

    Ma sensation, c'est que le C++ en tant que nouveau langage, complètement séparé du C, n'est pas un franc succès. En revanche, le C++ en tant que C étendu a un bel avenir devant lui...

    François

  17. #17
    Membre expérimenté
    Avatar de mathk
    Inscrit en
    Décembre 2003
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 211
    Par défaut
    Moi j'ai commencer par c puis c++ et java et j'ai trouver cela coohérent car c++ et quand même trops complexe pour qu'on puisse déveloper du premier coup car les erreurs sont beaucoup plus cacher. Ce que je veut dire c'est que même si ton program marche ca veut pas dire qu'il est corect.

  18. #18
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char buf&#91;20&#93;;
    sprintf&#40;buf, "voilà une petite chaine de caractères"&#41;;
    if &#40;buf == "voilà une petite chaine de caractères"&#41;
         printf &#40;"youpi!"&#41;;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std&#58;&#58;string buf;
    buf = "voilà une petite chaine de caractères"&#41;;
    if &#40;buf == "voilà une petite chaine de caractères"&#41;
         std&#58;&#58;cout << "youpi!"&#41;;
    Des erreurs cachées en C++ et pas en C ?

    Si vous trouvez que mon exemple en C est trop simple, vous pouvez aussi le remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define CH "voilà une petite chaine de caractères"
    char * buf = &#40;char*&#41; malloc&#40;strlen&#40;CH&#41;, 1&#41;; 
    strcpy&#40;buf, CH&#41;;
    On ne me fera pas croire que les newbs ne font jamais ce genre d'erreur -- celle du premier exemple est encore bien plus vicieuse en fait je trouve.

    Et nombre de fois que j'ai eu à expliquer en TP que non, on n'écrit pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int * i;
    scanf&#40;"%d", i&#41;;
    (remplacer scanf par n'importe quelle fonction qui doit renvoyer quelque chose via ses paramètres) Franchement, j'aurais préféré que l'on se concentre sur des aspects plus importants comme la structure du programme ou les communications avec les dispositifs externes. Mais bon. Ce genre de détails inintéressants font parti des prérequis à savoir pour les programmes les plus basiques en C.

    Programmer en C++ (et pas en C avec des classes) nous préserve d'énormément d'erreurs par rapport au C. Par contre celles qui restent sont plutôt de la catégorie "explose en pleine poire".
    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...

  19. #19
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 2
    Par défaut Le C++ : Un langage C enrichi, complexifié.
    En 1989, l'apprentissage du langage C était expliqué par un livre rédigé par les créateurs de ce langage (Proche de la gestion mémoire) :
    Brian Kerningham and (et) Dennis Ritchie.
    Après un mois de travail quotidien à lire le cours et effectuer les exercices de programmation, le livre avait livré son savoir.

    Récemment le C ANSI est apparu : Un effort pour universaliser ce langage (De manière comparable : Que l'on soit à Tokyo ou Paris, la grammaire française ne varie pas.).

    Début 1990, le langage C++ a fait son apparition. Le système de supervision du réseau Transpac (Technique X.25 de l'architecture en 7 couches OSI) en a bénéficié.

    De l'avis de tous les programmeurs, ce langages complète le langage C.
    Pour expliquer le lien qui unit ces deux langages :
    le C est inclus dans le C++.
    En conséquence : Tout programme en langage C est un programme en C++.

    Si vous disposez d'un environnement de programmation en C++, apprenez le C (Un C++ restreint), puis les notions propres à l'inovation C++ : Les notions de programmation objet (Héritage, classe...).

  20. #20
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Non, le C n'est pas un sous-ensemble du C++ -- y a pas de VLA en C++ p.ex.
    De plus, pour faire des choses similaires, en C++ on va éviter des continuer de se ballader avec les sources d'erreurs qui viennent du C. On utilise les abstractions dédiées (ou alors on aime débugguer et on n'engage que des stagiaires surdoués ou rigoureux) => string, vectors, passage d'arguments par référence, ...

    Bref, le C++ a cessé d'être le "C with classes" il y a longtemps maintenant. Inutile de trainer ce fardeaux et de l'imposer aux débutants qui ont bien d'autres choses intéressants à apprendre lors des premières leçons que la manipulation des pointeurs.

    (désolé si je radote)
    PS: la lecture de la mini FAQ sur le site de Stroustrup est des plus interressante.
    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...

Discussions similaires

  1. VARCHAR & CHAR - comment savoir lequel choisir !?
    Par Thierry8 dans le forum Requêtes
    Réponses: 15
    Dernier message: 18/12/2005, 20h54
  2. Lequel choisir???
    Par t_om84 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 27/10/2004, 14h02
  3. Curseur et lock : Les différence & lequel choisir
    Par BilTCD dans le forum Access
    Réponses: 2
    Dernier message: 22/10/2004, 14h03
  4. [FEDORA] Lequel choisir entre Fedora i386 et x86 pour un xeon?
    Par Oberon dans le forum RedHat / CentOS / Fedora
    Réponses: 7
    Dernier message: 13/07/2004, 14h52
  5. [Conseil] Glut vs SDL, lequel choisir
    Par Mathieu.J dans le forum GLUT
    Réponses: 15
    Dernier message: 08/06/2004, 08h47

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