C ou c++

Le problème exposé dans ce sujet a été résolu.

Bonjour, J'ai quelques questions pour les adeptes de la programmation en c/c++, j'aimerais savoir quels sont les intérêts d'apprendre les deux langages?

Car je ne connais pas trop ces langages et de ce que j'ai vu le c++ reprend les concepts du c mais avec la programmation objet (en gros) non ?

Du coup si on veut apprendre le c++ et si on a déjà des notions en programmation, est-il tout de même conseillé d'apprendre le C ?

Si il y a d'autres différences que la programmation procédurale/objet, quels sont-elles ? Quels sont les avantages de chacun de ces deux langages ?

Peut-être que ces questions vont vous paraître stupide, désolé d'avance si c'est le cas :P Merci d 'avance en tout cas.

+0 -0

Il est assez courant de passer du C au C++ en n'utilisant pas tout ce que le C++ moderne offre et donc en continuant de faire du C mais encapsulé dans des classes. Je précise juste cela par rapport à ta phrase

j'ai vu le c++ reprend les concepts du c mais avec la programmation objet (en gros) non ?

Donc dans l'absolu, il est toujours très intéressant d'apprendre les deux : ce sont des langages différents. Cependant, il est – à mon sens – plus simple de passer du C++ au C car il y a moins de concepts (pas d'exceptions, pas de classes, pas de surcharge, etc.) Il ne faut tout de même pas me faire dire ce que je n'ai pas dit : ce n'est pas parce qu'on sait programmer en C++ qu'on sait programmer en C.

De manière générale, je pense pouvoir te dire que le C++ est, aujourd'hui, plus utilisé que le C, mais c'est au feeling, sans aucune statistique derrière.

Oui, il y a bien d'autres paradigmes que le procédural ou l'OO : un petit coup d'œil sur Wiki mon ami. Je ne peux personnellement pas t'éclairer sur les différences.

PS : sinon, non la question n'est pas stupide du tout en sio, il faut juste faire attention car c'est le genre de sujet qui part très vite en troll ou en guerre. ^^

+0 -0

Très honnêtement, je conseille de commencer par C++.

Le C est un langage difficile. Bon, le C++ aussi. Mais pas de la même manière.

En C, c'est difficile de faire du bon code et facile de faire du mauvais code. En C++, c'est difficile de faire du bon code, mais c'est aussi difficile de faire du mauvais code.

En C++ tu as un certain nombre de concepts qui te permettront de coder de façon agréable avec des outils de hauts niveau (tels que les vector, et beaucoup d'autres containers génériques, et des algorithmes déjà codés près à travailler dessus). Depuis C++11 la gestion de la mémoire s'est simplifiée avec l'apparition des pointeurs intelligents. IL y a pas mal de concepts qui simplifient la vie du programmeur.

Tu verras souvent l'OO invoqué comme principale différence entre le C et le C++, mais en réalité c'est assez anecdotique. Tu peux très bien faire de l'impératif sans OO en C++, ça ne ressemblera pas pour autant à du C. Mais bon, pouvoir faire des classes c'est toujours pratique (surtout que C++ permet surcharge des opérateurs).

Et en plus de ça, les bibliothèques en C++ offrent souvent un interface à bases de classes, ce qui est parfois plus logique et plus simple à utiliser que les bibliothèques écrites en C, où on doit à la fois gérer l'allocation de la mémoire pour les données, leur initialisation, leur destruction et la nettoyage de la mémoire ce qui est lourd et sujet à des erreurs.

Donc, c'est très subjectif, mais je conseil le C++. Tu pourras toujours apprendre le C ensuite.
Faire l'inverse est également possible, mais tend à inculquer de mauvaises habitudes au futur programmeur C++ qui s'appuie trop sur ses connaissances en C et ne profite pas des innovations de C++.

Je connais des personnes qui te diraient que placer le C en prérequis de C++ est la pire chose possible.

Pour faire très simple, tout ce qui est faisable en C l'est aussi en C++ de la même manière (à peu de choses près). Cependant, C++ est loin d'être uniquement du C avec des classes : librairie standard étendue, templates, namespaces, lambdas. Le C++ est aussi plus strict sur certains points, notamment au niveau du typage, ce qui est (à mon avis) un avantage.

Personnellement, je te conseillerais d'apprendre le C++ directement. Non seulement, le C à tendance à disparaître au profit du C++, mais le C++ moderne est bien plus simple à utiliser et permet d'éviter certains problèmes courants en C (typiquement, les fuites de mémoire).

Si tu ne connais aucun des deux, le mieux serait de trouver un tutoriel C++ à jour (donc qui inclue les points important du C++11 et 14) qui ne présuppose ni que tu connaisses le C, ni que tu connaisses le C++98. Sauf que je n'ai jamais trouvé un tel tutoriel (mais je n'ai peut-être pas assez cherché). Apparemment, il y a au moins un livre "C++ Primer" (5ème édition) qui présente le C++11 zéro, mais il est en anglais et payant.

Merci à vous trois pour vos réponses,

Mais du coup j'aimerais savoir, si on peut faire la même chose dans les deux langages, si en admettant qu'une personne connaisse les deux langages, pourquoi devrait-il/elle programmer plutôt en C qu'en c++ ?

Je veux dire, est-ce qu'il y a vraiment des situations ou programmer en c est préférable qu'en c++ ?

Une réponse qui était souvent donnée à cette question est : l'embarqué. Cependant, cette réponse n'est plus vraiment valable du fait qu'il y a de plus en plus de µ-controlleurs qui se programment en C++. Donc actuellement, la plus grande raison de coder en C, c'est de maintenir ou de faire évoluer un projet écrit en C à la base (tels git ou Linux par exemples).

+1 -0

Si je parle de mon expérience personnelle j'ai d’abord appris le C++ pas très moderne avec openclassroom puis avec l'arduino. Après j'ai appris le C j'ai plutôt bien aimer voir comment on fait un semblant de POO avec ce langage puis j'ai appris le C++ moderne en lisant quelques chapitre de CppAnotations.

Après ta question est vraiment dur, disons que si tu apprends le C tu pourra plus facilement d'introduire au C++ et si tu apprend le C++ tu peux t'adapter au C en quelques heures. Mais je ne pense pas qu'écrire un projet en C soit actuellement une bonne idée si tu peux utiliser du C++ moderne.

+0 -0

Salut,

De manière générale, je pense pouvoir te dire que le C++ est, aujourd'hui, plus utilisé que le C, mais c'est au feeling, sans aucune statistique derrière.

Bermudes

Il est plutôt probable que cela soit l'inverse, même à l'heure actuelle, majoritairement à cause de la programmation embarquée et des projets initialement écrits en C.

Je veux dire, est-ce qu'il y a vraiment des situations ou programmer en c est préférable qu'en c++ ?

Drakop

Aujourd'hui, mise à part contraintes techniques particulières (création d'un système d'exploitation, contraintes mémoires importantes, architecture spécifique, etc.), non. C'est finalement une question de goût et d'habitude. Je préfère pour ma part le C parce qu'il est épuré et minimaliste, mais je n'ai aucune contraintes extérieures qui me force à l'utiliser.

+0 -0

Il y a un autre point qu'il est important de souligner, je pense : le fait que le C est un langage plus bas niveau que le C++. Quand on programme en C, on est beaucoup plus "proche" des composants d'un ordinateur.

Donc, si ça t'intéresse de savoir comment fonctionne un ordinateur à l'intérieur, je te conseillerais de plutôt te tourner vers le C. Ça peut même être une bonne passerelle pour apprendre un langage assembleur par exemple, qui est encore plus bas niveau.

Ceci dit, si ton but est juste d'apprendre le C++, il n'est pas nécessaire d'apprendre à programmer en C même si ça peut aider, comme ça a été dit plus haut. Personnellement, je préfère le C, pour les petits projets en tout cas.

+0 -0

Il y a un autre point qu'il est important de souligner, je pense : le fait que le C est un langage plus bas niveau que le C++. Quand on programme en C, on est beaucoup plus "proche" des composants d'un ordinateur.

Pour le coup, je crois que c'est faux. Il n'y a rien en C qui en puisse être fait en C++. Le C++ peut offrir une abstraction plus haut niveau que le C (et ça c'est cool) mais elle n'interdit en rien d'utiliser des fonctionnalités bas niveau.

On peut dire que le C est souvent choisi pour son côté bas niveau, alors que pour du plus haut niveau, beaucoup de développeurs se tournent vers d'autres langages tels que Java, C# ou Python. Il arrive ainsi encore assez souvent que des développeurs choisissent de coder leur interface graphique en Python (par exemple) et les fonctions internes, plus complexes, en C, se passant totalement du C++.

À mes yeux, le langage C++ semble être une sorte d'entre-deux, qui évolue gentiment, mais qui reste toujours un peu oublié et moins utilisé que le C ou Java.

D'ailleurs, le C reste plus souvent enseigné que le C++ dans les écoles supérieures, ce que je trouve un peu dommage.

Il y a un point qui a pas été abordé1 dans les réponses précédentes. Le C est un langage qui est vachement plus bas niveau que le C++ moderne, et ça peut être intéressant de commencer par là avant de se mettre au C++.

L'écueil de cette méthode, c'est de faire du C++ comme on fait du C, mais là, c'est le support de cours C++ qui doit insister aussi lourdement que faire se peut sur ce point. :/


  1. EDIT : Sauf par mon VdD :) 

En C++ on n'utilise presque jamais de pointeurs nus, mais uniquement des pointeurs intelligents ou references. On n'alloue presque jamais manuellement la memoire (tu peux oublier malloc, et dire bonjour a new + RAII capsule).
Et les usages de pointeurs nus et d'allocation manuelles necessaires sont en general tres encadres par les bonnes pratiques du langage.

En fait, tous le aspects difficiles a manipuler (et souvent inutiles a manipuler lorsque l'on sort des domaines de niche ou le C est le langage incontournable) en C1 sont plus haut niveau2 en C++, avec les securites qui vont avec et sans les desavantages, notamment en terme de performances3.
Par contre, lorsque necessaire, il est toujours possible d'y avoir acces. Si la necessite devient omnipresente, c'est qu'il est peut-etre necessaire d'aller sur du C directement, mais en general, hors contrainte particulieres, il n'y a pas forcement de raisons de s'orienter sur du C pour un quelconque projet.


  1. Attention, le C++ apporte bien d'autres concepts difficiles qui le rendent en pratique tres difficile a maitriser ; a mon sens plus que le C. 

  2. Au sens moins proche du materiel. 

  3. Voire superieures grace a une notion de typage un peu plus avancee, permettant d'eviter les surcouts des transtypages vers et depuis void (comme par exemple quicksort de la bibliotheque standard) 

+8 -0

bonsoir,

tout le monde semble d’accord qu’à choisir entre C et C++, il vaut mieux prendre C++ (et sans passer par la case C, encore). ceci dit, la question initiale incluait aussi :

quels sont les intérêts d’apprendre les deux langages ?

dans l’absolu, pourquoi s’intéresser à C++ ? il a beau être plus haut‐niveau que le C, il n’en reste pas moins bas‐niveau. et atrocement compliqué. as‐tu une raison spécifique de regarder C ou C++ ? si le but est simplement de programmer dans ton coin, autant apprendre Java, Scala, ou n’importe quel autre langage plus moderne et plus haut‐niveau.

+0 -0

si le but est simplement de programmer dans ton coin, autant apprendre Java, Scala, ou n’importe quel autre langage plus moderne et plus haut‐niveau.

<troll>Pas certain que Java soit réellement plus moderne que C++…</troll>

dans l’absolu, pourquoi s’intéresser à C++ ?

Parce que maîtriser C++, c'est la classe. Alors que maîtriser Java ou JS c'est la loose.

Pardon je sors –>[]

+11 -2

J'ai lu plus haut, rapport à Python, que C++ était un intermédiaire un peu bâtard entre C et Python. Je voudrais corriger ce point.

Quand on se place du point de vue de Python, C et C++ sont aussi bas niveau l'un que l'autre parce qu'ils se trouvent tous les deux à un niveau d'abstraction inférieur ou égal à l'interpréteur standard. En particulier, ça veut dire que les deux se bindent tout aussi facilement avec Cython (même si ça demande une certaine gymnastique de jongler avec les smart pointers du C++ et le comptage de références interne de CPython).

Maintenant C ou C++ en premier ? Honnêtement j'ai pas d'avis tranché sur le sujet. La compréhension de C ouvre énormément de portes pour tous les autres langages de programmation, alors que pour développer de vrais projets, j'utiliserais C++ sans hésiter.

+1 -0

Il y a un autre point qu'il est important de souligner, je pense : le fait que le C est un langage plus bas niveau que le C++. Quand on programme en C, on est beaucoup plus "proche" des composants d'un ordinateur.

C'est complètement faux.

Le C++ est aussi bas niveau que le C. Ou plus exactement, il va aussi loin pour attaquer le hardware. En revanche, Le C ne va pas aussi loin que le C++ sur les axes (oui, au pluriel) de l'OO (même si avec CLOS on peut avoir du multi-dispatch), du générique, de la méta-prog, etc.

Pour ces histoires de niveau, c'est des diagrammes de Kiviat qu'il faut voir.

Donc, si ça t'intéresse de savoir comment fonctionne un ordinateur à l'intérieur, je te conseillerais de plutôt te tourner vers le C. Ça peut même être une bonne passerelle pour apprendre un langage assembleur par exemple, qui est encore plus bas niveau.

Cela n'apprend en rien les détails de fonctionnement des micro-proc & cie. Le C apprendra les détails d'une pseudo machine qui n'existe pas vraiment. Pas des machines d'aujourd'hui (ni d'il y a 20ans) avec leurs niveaux de caches, les pipelines, les micro-assembleurs, etc. Ca, on peut en ressentir la présence, mais on ne peut pas l'attaquer sans jouer avec l'assembleur.

Sinon, comme d'autres: ce n'est pas l'OO qui fait la grosse différence entre le C et le C++. C'est la libération déterministe des ressources, le meilleur typage, la généricité, et anecdotiquement le support intégré de l'OO.

Ce premier point est aussi la raison pour laquelle moins je fais de C, mieux je me porte.

Après, il est aussi intéressant de connaitre le C que le latin (peut-être pas aujourd'hui, mais au XIIIe) : c'est un langage universel et toutes les communications entre langages différents passent par du C. Il n'y a que dans les mondes de la JVM, ou de .NET, ou du web que l'on va utiliser d'autres passerelles (ou de COM, CORBA… il y a longtemps).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte