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 :

Question existencielle sur le C/C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut Question existencielle sur le C/C++
    Salut, j'ai une question, qui paraitra peut-etre evidente à ceux qui connaissent le C et le C++ mais qui est un peu floue pour moi qui ne connait aucun des deux.

    Bon c'est pas très facile à expliquer mais je me lance.

    J'ai eu aujourd'hui un cours d'intro rapide au C, parce qu'on en aura besoin pour utiliser l'api win32 plus tard.

    J'avais déjà le projet depuis un moment d'acheter le livre de Kernighan et Richie sur le C et à la fin du cours j'ai été demandé au prof si le fait que la 2e edition traite de la norme ANSI C90 n'était pas un problème (j'avais lu la critique du livre sur développez mais je ne savais pas trop dans quel mesure ça pouvait être un soucis). Il m'a dit que non mais il m'a alors demandé pourquoi approfondir mes connaissances du C au lieu d'apprendre tout de suite le C++.
    Moi je pensais que si je connaissais java, le C++ ne m'était pas utile, du moins dans l'immédiat. Mais il m'a dit que je ne pouvais pas faire en java tout ce que je pouvais faire en C++. Puis il m'a dit que comme le C est un sous ensemble du C++, si j'apprend le C++, automatiquement j'apprend le C en même temps.

    Jusque là je voyais plutot le C et le C++ comme deux langages différents.
    Enfin je croyais que le C++ était juste une évolution du C en langage OO qui avait gardé la syntaxe du C mais en avait perdu les avantages ( proche de la machine, rapide etc).

    Ce que je n'ai pas bien compris c'est qu'il m'a dit que si j'apprend le C++, l'avantage c'est que j'apprend le C en même temps, mais sans toute une partie du langage C qui n'est "plus utilisée" (en fait je ne me souviens plus du terme qu'il a utilisé). Cette de cette phrase qu'est née ma confusion.
    Quelle partie du C un prof ou un livre de C++ ne m'apprendrait-il pas?

    Il me disait aussi qu'en conséquence, quand j'aurais besoin de faire quelques choses en C pure, il suffirait de ne pas utiliser ce qu'à apporter le C++.

    Avec tout ça, si je résume, est-ce qu'on peut dire qu'en fait de nos jours tout le monde fait du C++, mais que quand ces personnes n'utilisent pas les fonctions du C++ ( tout le coté OO ), elles font en fait du C ?
    Ou, dit autrement, que tout le monde fait du C, sauf si on utilise les ajouts du C++ ?
    (Je me doute bien que ce n'est pas tout à fait exacte mais est-ce que c'est un peu ça l'idée?)

    Et donc en même temps, on peut tout à fait ecrire un OS en C++, en utilisant pas la POO, ce qui revient en fait à faire du C?

    Finalement le but de toutes ces questions (dont j'ai bien conscience qu'elles doivent vous paraitre tordue ) c'est de savoir, si j'apprend le C++, le jour où j'ai besoin de faire du C est-ce que je n'aurai rien d'autre à faire que ne pas utiliser ce qui est apparu avec le C++ ?

    (en meme temps si ça se résume à ca, et que j'apprend le C++ directement, le jour où je veux faire du C, comment saurais-je ce qui fait partie du C et ce qui n'en fait pas partie?)

    Bon j'espere que tout ce que j'ai écris est compréhensible et que vous pourrez m'éclairer. Merci en tout cas.

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    En meme temps si ça se résume à ca, et que j'apprend le C++ directement, le jour où je veux faire du C, comment saurais-je ce qui fait partie du C et ce qui n'en fait pas partie.
    Tout à fait

    Sinon j'ai l'impression que tu as compris la chose. Si tu veux vraiment comprendre exactement les différences, fait du c et du c++ .

    Sinon il me semble qu'il y a toujours un débat qui reste sur le fait que le c++ est plus ou moins du c, et sur lequel il vaut mieux apprendre...

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Mushroom7
    Moi je pensais que si je connaissais java, le C++ ne m'était pas utile, du moins dans l'immédiat. Mais il m'a dit que je ne pouvais pas faire en java tout ce que je pouvais faire en C++. Puis il m'a dit que comme le C est un sous ensemble du C++, si j'apprend le C++, automatiquement j'apprend le C en même temps.

    Jusque là je voyais plutot le C et le C++ comme deux langages différents.
    Je suis assez d'accord avec cette vision.

    Citation Envoyé par Mushroom7
    Enfin je croyais que le C++ était juste une évolution du C en langage OO qui avait gardé la syntaxe du C mais en avait perdu les avantages ( proche de la machine, rapide etc).
    Ce ne sont pas là les avantages que je citerais. En particulier, en terme de rapidité, le C++ possèdes des fonctions qui permettent de ne pas avoir à choisir entre abstraction et performances, mais d'avoir les deux.

    Le plus gros avantage que je vois au C sur le C++, c'est son dépouillement qui fait qu'on peut le trouver sur n'importe quelle plate-forme, avec un bon compilateur. Un bon compilateur C++, c'est autre chose. La rapidité de compilation peut aussi être un avantage. Le fait que le format des binaire générés soit facilement standardisable.

    Citation Envoyé par Mushroom7
    Quelle partie du C un prof ou un livre de C++ ne m'apprendrait-il pas?
    La bibliothèque standard (un autre plus simple d'emploi et plus riche est fournie en C++). Tu risque d'être plus gêné par ce qu'il t'apprendrai. Pour faire une analogie, une voiture moderne, c'est complexe. Ca demande de la mécanique, mais aussi de l'électronique. Pour apprendre à bien t'en servir, tu doit maîtriser le GPS, l'autoradio, comprendre un minimum comment fonctionne l'ABS... Et ça démarre d'un simple appui sur un bouton. Une voiture de 1800, c'est rustique, ça se répare avec du fil de fer et ça dure longtemps. Mais je suis persuadé que tu n'arriverais pas à en démarrer une.

    Citation Envoyé par Mushroom7
    Et donc en même temps, on peut tout à fait ecrire un OS en C++, en utilisant pas la POO, ce qui revient en fait à faire du C?
    On peut tout à fait faire un OS en C++, en utilisant la POO là où elle est utile (pourquoi s'en priver ?), et les autres spécificités du C++ là où elles sont utiles, un mode purement "à la C" là ou c'est utile. Ca restera pour moi du C++, et non du C. Il y a quand même des différences entre les langages.


    Citation Envoyé par Mushroom7
    Finalement le but de toutes ces questions (dont j'ai bien conscience qu'elles doivent vous paraitre tordue ) c'est de savoir, si j'apprend le C++, le jour où j'ai besoin de faire du C est-ce que je n'aurai rien d'autre à faire que ne pas utiliser ce qui est apparu avec le C++ ?
    A mon sens non. Je pense me débrouiller en C++. Si on me plaçait devant une feuille blanche en C, j'aurais du mal à partir, je calquerais en C les schémas de pensée que j'ai pu développer en C++, même là où ils ne seraient pas adaptés ou reproduisibles, je perdrais un temps fou à me servir de la bibliothèque (je n'ai jamais vraiment su quels %x faisait quoi dans un printf), et mon code serait probablement bourré d'étourderies là où je ne pourrais pas bénéficier des éléments simplificateurs du C++ (je pense en particulier aux destructeurs, et aux exceptions).

    Par contre, savoir lire suffisemment de C pour s'interfacer avec une bibliothèque écrite dans ce langage ne pose généralement pas de problème quand on fait du C++. De même quand il s'agit de faire une interface C à une bibliothèque C++, là où ça a du sens. Et je ne me suis jamais encore trouvé dans une situation où j'ai eu besoin d'écrire du C.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    je pense que tu devrais pas te poser ces questions, et que tu devrais apprendre le C++.

    Je pense qu'en tant ingénieur, ce que je suis, on devrait nous apprendre le C++. Ca devrait etre obligatoire, comme l'est l'anglais.

    Le problème c'est que nous apprend pas de langage en école d'ingé, et on est obligé de le faire tout seul.

  5. #5
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Merci à tous pour vos réponses.

    En fait avant aujourd'hui, je pensais qu'il n'était pas possible de faire de la programmation de bas niveau en C++.

    Je voyais vraiment ce langage comme un java compilé.
    Ce qui fait que je n'ai jamais eu envie de l'apprendre en + du java.

    Par contre le C (ainsi que l'assembleur) m'a toujours attiré car la programmation systeme m'interesse énormément.

    Mais si vous me dites qu'on peut faire en C++ tout ce qu'il est possible de faire en C alors ça change tout.
    Et si c'est le cas, est-ce que le C++ reste aussi rapide que le C ?
    J'en doute quand même car si le C++ n'avait que des avantages par rapport au C, pourquoi des gens continueraient à écrire des programmes en C alors que c'est moins facile?

    J'ai aussi demandé au prof si c'était pas mieux que j'apprenne dabord le C puis le C++ mais il m'a dit non (genre ça n'a aucun intêret).

  6. #6
    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
    Enfin je croyais que le C++ était juste une évolution du C en langage OO qui avait gardé la syntaxe du C mais en avait perdu les avantages ( proche de la machine, rapide etc).
    C++ n'a pas grand chose à voir avec la POO.
    C'est en effet l'une des fonctionnalités de C++, mais ce n'est pas une fonctionnalité principale qu'on n'utilise partout, comme cela est fait en Java par exemple.

    Si tu connais C et Java, tu connais les deux pires façons de programmer en C++.
    En C++ on ne programme ni comme en C, ni comme en Java.
    Parce que le C c'est pas sûr, c'est sale et c'est verbeux, et parce que le Java c'est pas efficace ni robuste, surtout sans les outils que fournit Java.

    Pour ce qui est de la performance, en C++ tu peux achever la performance que tu veux, tout comme en C. Ce n'est pas le cas de Java.
    Néanmoins en C++ tu auras de bien meilleurs compromis efficacité/usabilité qu'en C. (par exemple, en C si tu veux faire des conteneurs génériques tu es obligé de faire des conteneurs de pointeurs, alors qu'avec la métaprogrammation tu peux générer des conteneurs de n'importe quel type d'objet voulu en C++)

    Je voyais vraiment ce langage comme un java compilé.
    Java est un langage extremement simple, C++ est assez sophistiqué.
    Ce ne sont pas des langages vraiment comparables au niveau des fonctionnalités qu'ils fournissent.

  7. #7
    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 deubelte
    Je pense qu'en tant ingénieur, ce que je suis, on devrait nous apprendre le C++. Ca devrait etre obligatoire, comme l'est l'anglais.

    Le problème c'est que nous apprend pas de langage en école d'ingé, et on est obligé de le faire tout seul.
    Pourquoi tu dis ça ? Aujourd'hui une école d'ingénieurs sans une base minimale d'enseignement en informatique ?

    Dans mon école on l'enseigne, et toutes les grandes écoles d'ingé enseignent aussi un langage au moins.

  8. #8
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Le problème c'est que nous apprend pas de langage en école d'ingé, et on est obligé de le faire tout seul.
    Un conseil, change d'école.

    C++ n'a pas grand chose à voir avec la POO.
    Oulà, attention tout de même, même s'il est possible de faire d'autres styles de programmations, la POO est plus avancée que dans java (héritage multiple par exemple). Et quelque soit le programme, on utilisera une classe. La POO, c'est plus une manière de concevoir son programme, il est possible d'avoir une approche OO en C (avec moins de fonctionnalités qu'en C++ bien entendu).

    Parce que le C c'est pas sûr, c'est sale et c'est verbeux,
    Tu as tendance à faire des généralités un peu rapidement, un programme C peut très bien être sur (OpenBSD est en C ...), sale je ne vois pas ce que tu veux dire.

    le Java c'est pas efficace ni robuste, surtout sans les outils que fournit Java.
    Les outils c'est un peu comme le C++ et la STL, ça va ensemble.

    alors qu'avec la métaprogrammation tu peux générer des conteneurs de n'importe quel type d'objet voulu en C++
    méta-programmation ? qu'est ce que ça a à voir ?

  9. #9
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    parce que le Java c'est pas efficace ni robuste
    On peut très bien écrire du code Java efficace... Certes parfois moins rapide que C++ (et encore...). Mais bon passons.
    Question robustesse, Java est nettement plus robuste que C++. Et son modèle de sécurité est nettement plus avancé...

    la POO est plus avancée que dans java (héritage multiple par exemple).
    L'héritage multiple existe aussi en Java, mais il s'agit d'héritage de type (interface, héritage public de C++), pas d'implémentation. D'ailleurs, si tu utilises un héritage privé en C++ (héritage d'implémentation), c'est que tu te trouves dans les 0.01% de situation où il est utile.

    la métaprogrammation tu peux générer des conteneurs de n'importe quel type d'objet
    Programmation générique.


    Pour en revenir au problème de base, C et C++ sont deux langages différents, et doivent être appris séparément. On ne code pas en C++ comme en C (même si ça fonctionne souvent), et vice versa.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    Moi j'avais un prof qui disait que "faire du C++ sans orienté objet, c'est faire du C--".
    Evidemment on peut faire sans, mais pour des raisons conceptuelles je me vois mal me lancer dans un "long" projet sans orienté objet, mais c'est selon les besoins de chacun évidemment.

    Pour ce qui est de la comparaison C et C++, je dirais que C se trouve un niveau plus bas que C++ au niveau conceptuel (pas juste à cause de l'OO mais aussi du reste), mais au même niveau pour ce qui est des possibilités et des performances.

Discussions similaires

  1. [LDAP] Questions générales sur LDAP
    Par guiguisi dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 25/05/2005, 10h05
  2. question general sur triggers (liaison avec VB)
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 15h57
  3. question general sur malloc
    Par vince3320 dans le forum C
    Réponses: 8
    Dernier message: 23/06/2004, 10h39
  4. DTS : Question simple sur sources de données
    Par guignol dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/05/2004, 12h09
  5. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13

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