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

C++ Discussion :

C++ vs C [Débat]


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    Bonjour à tous,

    ce débat possède une discussion similaire sur le forum général du développement. Ce forum étant plus approprié pour ce débat, je vous invite à le poursuivre dessus. Voici l'adresse du débat : http://developpez.net/forums/showthread.php?t=327

    merci à vous

    hiko-seijuro
      0  0

  2. #2
    Invité de passage
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 1
    Par défaut
    Je déterre se sujet pour une petite question :

    en quoi cin et cout sont plus sûr que scanf et prinftf ?
      0  0

  3. #3
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Par défaut
    c'est simple: avec printf, tu n'as aucune verification a la compilation du type des variables que tu lui passes en argument.
    avec cin et cout, c'est le type des arguments qui determine la fonction qui sera appelée pour les afficher à l'écran grâce à la surcharge des opérateurs.
    Un autre truc c'est que printf n'est pas extensible: tu ne peux créer de formats pour tes objets perso, alors que tu peux toujours redéfinir un nouvel opérateur de lecture ou d'ecriture dans un flux en C++.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA
      0  0

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Par défaut
    En gros ma question est : si je code quelque chose qui contient uniquement des instructions et fonctions qui existe dans le standard C. Comment je sait si le programme et C ou C++ ? A l'extension du fichier ?
    oui, avec gcc ou le compilateur de visual, si tu nomes tes fichier en ".c", c'est le compilateur C qui est appellé. si tu mets l'extenssion ".cpp" c'est le compilateur C++ qui est appelé (dans le MAN de gcc c'est expliqué)

    Enfin, un prog C ne compile pas forcement avec un copilo C++:
    Par exemple, les definitions potentielles du C n'existent pas en C++...
    Les caractere placé entre simple cote (ex: 'a' ) sont considéré comme des int en C et comme des char en C++...

    ces incopatibilités dependent de la nomre du C et de la norme du C++ considérées (ANSI, ISO,....)

    pour plus d'info:
    http://perso.wanadoo.fr/cvincent/cou...atibilite.html
    je sais pas si tout y est mais j'ai trouvé la page plutot bien.
      0  0

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 9
    Par défaut et la conception???

    Je suis étonné que, dans cette discussion, la question de l'analyse-conception OO ne soit jamais intervenue??

    bah oui! à l'origine, que je sache, on a inventé la POO pour que le fossé entre objets "naturels" et programmation diminue.

    Au début, pour résoudre un problème, des supra-mecs alignaient des 0 et des 1 dans une carte perforée (des trous ou pas des trous). Le fossé était alors ENORME. et puis on a fait de l'assembleur, très vite, du C et puis pour continuer à réduire l'écart ET DONC les COUTS DE PRODUCTIONS !!! du C++ : de l'objet. Ce qui permet d'avoir une approche composant. C'est comme ça que la plupart des RAD (surtout, à ma connaissance et à mon gout, ceux de Borland) offre des Objets tout fait et dont on peut hériter pour capitaliser les expériences...

    Bref. pourquoi personne y dit ça???
      0  0

  6. #6
    Membre éprouvé Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Par défaut
    Je ne pense pas que ce soit un problème d'algo uniquement réalisables en C ou en C++, il faut juste voir quel langage te paraît plus adapté par rapport à ce que tu veux programmer.

    Au pire pour les petits prog tu peux essayer de coder en C et en C++ pour te rendre compte quel est le langage qui colle mieux par rapport à ce que tu veux faire.
      0  0

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par défaut
    Moi je dirais que pour un petit prog vite fait qui ne sert qu'a moi par exemple je le ferai naturellement en C (premier language de haut niveau que j'ai appris). Par habitude et puis pour la souplesse du code.
    Alors qu'un programme où rentreront en compte la vitesse d'exec, la quantité de mémoire et tout je le ferai en C++ qui m'imposera une certaine rigueur.
      0  0

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    Qu'est-ce qui change lorsque vous decidez de programmer en C ou en C++ ?? Pour ma part si je veux faire du C, je n'ai que des restrictions par rapport au C++, mais si je veux passe du C au C++, je n'ai quasiment rien a changer...
      0  0

  9. #9
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 62
    Par défaut
    Citation Envoyé par claudio.matzke
    Je suis étonné que, dans cette discussion, la question de l'analyse-conception OO ne soit jamais intervenue??

    bah oui! à l'origine, que je sache, on a inventé la POO pour que le fossé entre objets "naturels" et programmation diminue.
    Tout a fait d'accord !!

    Le C++ est un langage de programmation oriente objet, quel confort !! Plus besoin de reecrire ce qui a ete ecrit il y a plus de vingt ans !! Simplement heriter du code disponible pour creer ses propres objets.

    Je prefere jouer avec mes legos plutot que les atomes qui les composent !
      0  0

  10. #10
    Membre actif Avatar de Causa Sui
    Inscrit en
    Mai 2003
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 133
    Par défaut
    Enfin... Ne mélangeons pas les torchons et les serviettes! Pourquoi toujours opposer deux langage avec des utilités differentes... Certes, C++ est trés utile pour faire des programmes windows (merci les héritages de CFrame, ect.); mais qui ose dire qu'il est plus simple d'utiliser C++ pour faire un noyau d'OS (ni les codeur de win, ni ceux de Linux, ne l'on dit!)?
    C'est pourtant vrai qu'il y a des choses qui ont objectivement été améliorée de C à C++.
    Stroustrup lui même explique que le nom vien du faite que C++ est le C avec des truc en plus (tout le monde a reconnu l'incrémentation: ++), mais que ce n'est pas tout a fait un "D" (C+1); parce que le C++ est plus proche du C que ne le serait un langage nouveau.
    Tout cela pour dire qu'on peut oublier C++ quand on a pas besoin d'objets; et oublier C quand on veut faire de la POO. Simple question de bon sens!
      0  0

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 28
    Par défaut
    Je suis d'accord sur le principe : le C et le C++ ne servent pas à la même chose, et il s'agit de deux versions du même langage. La programmation de micro-controleur par exemple se fait en C ou asm...

    Mais juste une petite précision: la plupart des noyaux (Unix, Linux et Windows) ont été écrit avant ou pendant l'invention du C++ (quand je dis pendant, c'est avant que le langage et la STL soient considérés comme mature).
    D'où le C...

    Personnellement je n'ai jamais codé de noyau d'OS, je ne peux donc pas dire si l'objet est inutile ou non dans ce domaine très spécifique, mais je comprend qu'une fois que c'est fait, et que ça tourne plutot pas trop mal, on a pas trop le courage de tout réécrire (surtout quand c'est pas de l'objet ) et qu'on préfère modifier simplement le code déjà éxistant.

    Quand à savoir si C plus simple de faire un noyau en C++, quelqu'un d'expérimenté peut-il répondre ?
      0  0

  12. #12
    Membre actif Avatar de Causa Sui
    Inscrit en
    Mai 2003
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 133
    Par défaut
    Citation Envoyé par Fëanor13
    Mais juste une petite précision: la plupard des noyaux (Unix, Linux et Windows) ont été écrit avant ou pendant l'invention du C++
    Bonne remarque... Qui me pousse un peu a revoir ce que j'ai dis.
    Je comprends aisément que ceux qui font du C++ conçoivent mal de "retomber" vers les C. Cependent, dans le cas contraire; c'est a dire celui ou on commence par le C, il est assez concevable, celon ce qu'on fait, qu'on pense pouvoir ce passer de C++.
      0  0

  13. #13
    Invité de passage
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1
    Par défaut
    Bonjour à tous,

    Juste pour dire, j'ai déjà programmé du C, du C++, du Java et aussi du Pascal Objet (Delphi quoi!)

    Je ne sais plus qui l'a dit dans le forum, mais effectivement, je pense que le C et le C++ n'ont pas vocation à faire la même chose.

    Dans un premier temps, je pense qu'il serait bon de classifier un peu, le C est un langage d'assez bas niveau, en effet, on peut accéder aux espaces mémoire, bidouiller les bits, on fait des allocations de mémoire manuellement (malloc), ce qui fait que c'est de bas niveau.

    Ensuite, nous avons le C++, alors lui il est un peu plus dur à classer du fait qu'on puisse faire du C dans un environnement de C++, il est à la fois bas niveau, et haut niveau, on peut programmer sans se soucier de l'allocation de la mémoire, ou des bits, par contre, on a toujours à faire des delete pour les objets.

    Ensuite, je mettrais le Pascal objet, puisqu'il permet aussi des opérations sur la mémoire ou sur les bits.

    Enfin, le Java, qui est un langage pur objet, et qui apporte une couche d'abstraction supplémentaire.

    Alors à quoi ça sert, cette classification? Je pense que c'est une bonne base pour dire que chaque langage à ses avantages et ses inconvénients, et donc ne sert pas dans les mêmes cas.

    Perso, j'ai utilisé le C pour faire du temps réel, et je pense que c'est pour le moment le meilleur langage pour ça. En temps réel, la gestion de la mémoire est fondamental, il faut être le plus près possible des composants pour ça.

    Ensuite, le C++ et le Pascal Objet (aussi le Java, mais j'en dit un mot plus loin) permettent une abstraction non négligeable et apporte aussi bien d'autre avantages. A quoi sert l'abstraction? Elle sert autant que le passage des cartes perforées à l'assembleur, ou de l'assembleur au C... Pourquoi je vais me faire chier à gérer la mémoire, c'est pas à ça que sert le programme que j'écris! Et en plus, les avantages qu'apporte l'héritage et l'encapsulation, sont très important!

    A l'attention de ceux qui ont toujours programmer en C, vous rendez vous compte de l'avantage de pouvoir écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button b = new Button("OK");
    Ou même l'exemple des dessins!

    Enfin, un bref mot sur le Java, qui effectivement apporte les même avancées que le C++, mais sans confusion. Avec du Java on fait de l'objet, c'est tout. En plus, le Java apporte l'avantage de s'abstraire de la machine sur laquelle le programme s'exécute.
    Saviez vous que les MAC et les PC ne mettent pas les bits de poids fort du même coté?

    Pour terminer, je dirai comme quelqu'un l'a déjà dit, avec tout on peut faire tout! Un jour nous sommes passé des cartes perforées à l'assembleur, puis au C, puis au C++, puis.... on verra!

    Si vous ne faîtes pas d'application critique au niveau gestion de la mémoire, je vous conseille de suivre votre temps, passez au C++.
    Si vous avez besoin de faire tourner votre appli sur toutes les plateformes, faîtes du Java.
    Et puis si vous voulez faire votre appli, perso, vous avez le choix entre Java, C++ et Delphi!

    Merci pour votre attention!

    Des remarques de votre part me feraît plaisir!
    A+
      0  0

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 28
    Par défaut
    première remarque :
    je ne vois pas temps de différence entre malloc et new, surtout new[], sauf qu'on peut se planter sur la taille dans malloc (super avantage, non )

    deuxième remarque :
    je code en Pascal Objet moi aussi et je n'aime pas ce langage, donc je risque de ne pas être objectif, mais pour ce qui est d'un langage d'assez bas niveau je m'oppose, surtout quand je vois les restriction d'utilisation des pointeurs sur objets, mais je ne m'étendrais pas plus sur le sujet car il s'agit d'un post C-C++ en non pas C++-tous les autres.

    troisième remarque :
    l'utilisation du java est plus abstraite que le pascal, mais le langage en lui même pas tant que ça, surtout comparé à la CLX de Borland. la seul différence, c'est que leur librairie est standard. Je ne m'étendrais pas plus sur le sujet pour les même raisons que la deuxième remarque.

    quatrième remarque :
    que le mac code en big endian ou en little endian (inversion des positions des bits de poid fort), cela n'as pas grande importance (sauf en asm) car c'est le compilateur qui gère ça. Que l'on code en C, en C++, en Pascal, en Java ou en C#, tant que se que l'on fait est standard, on a pas à ce poser de question.

    Cinquième remarque (qui s'adresse CCausa::pSui) :
    Le problème auquel je pensais, ce n'est pas vraiment de passer au C++, mais plutot de réécrire tous le code du noyau.
    Je rappel que le Cobol est encore l'un des langages les plus utilisés au mode car bcp d'appli qui étaient écrites dans ce langage sont mise à jour mais pas réécrite.

    Comme je l'ai déjà écrit, je n'ai jamais codé de noyau et j'aimerai bien que quelqu'un l'ayant déjà fait puisse s'exprimé ici.
      0  0

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Par défaut
    Citation Envoyé par gl
    Citation Envoyé par Blustuff
    Moi il y a autre chose que je comprends pas. Si j'ecris un code en C il sera evidement compilable par un compilateur C++.
    Ce n'est pas tout a fait vrai, il existe qq cas qui ne fonctionne pas.
    en effet, par exemple en C on peut transtyper implicitement un pointeur void* vers un autre pointeur, pas en C++.

    Ainsi, un compilo C peut compiler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *str = malloc(20);
    alors que pour un compilo C++ il faudra expliciter le transtypage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *str = (char*)malloc(20);
    sinon il faut quand même faire la différence entre le C et le C++, par exemple
    en C on utilise malloc/free en C++ new/delete
    en C on utilise printf, en C++ std::cout
    etc ...
      0  0

  16. #16
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 8
    Par défaut
    programme complet ok en C mais pas en C++:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    main()
    {
      double s = sqrt(2); // appel à une fonction non déclarée autorisée
    }
      0  0

  17. #17
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par Fëanor13
    première remarque :
    je ne vois pas temps de différence entre malloc et new, surtout new[], sauf qu'on peut se planter sur la taille dans malloc (super avantage, non )
    new appelle le constructeur d'un objet, et pas malloc.
      0  0

  18. #18
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si vous avez besoin de faire tourner votre appli sur toutes les plateformes, faîtes du Java.
    "toutes" les plate-formes, c'est un peu exagéré.
    Sinon en codant en C ou C++ avec des bibliothèques portables, on arrive à faire fonctionner un executable sur autant de plate-formes que Java.
      0  0

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par BlackGoddess
    sinon il faut quand même faire la différence entre le C et le C++, par exemple
    en C on utilise malloc/free en C++ new/delete
    en C on utilise printf, en C++ std::cout
    etc ...
    salut

    je code en C/C++ des algos de traitement d'images, donc je suis pas vraiment spécialiste en info / prog, et jusqu'il y a peu je mélangait allègrement C et C++ ...

    alors ds mes prog j'utilisait des fois printf, d'autres fois cout, pareil avec malloc et new .. a la barbare quoi
    je me suis amélioré en C++ que j'utilise principalement maintenant (surtout pr les classes images et les fonctions qui vont bien) mais j'utilise toujours fprintf et fscanf parce que les méthodes équivalentes en C++ me semblent bien compliquées ...

    donc est ce vraiment mal de mélanger C et C++ ? quelles précautions prendre ?
    que signifie extern "C" ?
      0  0

  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
    printf et scanf moins compliqués ?

    Hum ... ce n'est pas comme :
    - S'il fallait apprendre par coeur une liste de spécificateurs de formats (/avoir une table à portée de main)
    - s'il fallait comprendre la différence adresse-valeur, voire comment fonctionnent les pointeurs pour se servir de scanf
    - si lire une chaine de caractères était simple et non dangeureux à la fois
    (http://www.research.att.com/~bs/new_learning.pdf)
    - si le C++ nous permettait d'étendre simplement le panel de fonctions d'affichage (textuel) pour nos données
    - si la syntaxe de malloc n'était pas lourde -- c'est vrai quoi, pourquoi extraire des informations des types qui sont connus à la compilation ?
    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...
      0  0

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