OVH Cloud OVH Cloud

Les avantages respectifs de C et du C++

59 réponses
Avatar
leo.hal
Bonjour,

Comme j'h=E9site entre apprendre le C et apprendre le C++ , je cherche a
peser le pour et le contre; d'o=F9 ma question :
Quels sont les avantages du C et du C++ ?

Merci

10 réponses

1 2 3 4 5
Avatar
Pascal Bourguignon
writes:
Comme j'hésite entre apprendre le C et apprendre le C++ , je cherche a
peser le pour et le contre; d'où ma question :
Quels sont les avantages du C et du C++ ?


Certains ont la théorie que ce ne sont pas le même langage, mais ce
n'est pas mon avis. Ta question me semble étrange!

Apprends C! Puis apprends C++!

Tu n'auras pas perdu de temps, car C++ est un sur-ensemble (à de trés
petits détails insifignifiants) de C.


À mon avis, il y a moins de différence entre C et C++ (dans le sens
différence ensembliste) qu'entre C99 et K&R C, par exemple.




--
__Pascal Bourguignon__ http://www.informatimago.com/

"You question the worthiness of my code? I should kill you where you
stand!"

Avatar
Fabien LE LEZ
On 19 Jan 2007 10:30:41 -0800, :

Quels sont les avantages du C et du C++ ?


Mouarf... C'est le troll du week-end ?


Je pense que le message ci-dessous est honnête, mais je peux avoir
commis des erreurs, d'autant que je n'ai pas un bon niveau en C.


Le C++, comme la très grande majorité des langages (Java, PHP, Bash,
Basic, etc., mais pas C ni l'assembleur) a un vrai type "chaîne de
caractères" et de vrais types "tableau".

Un exemple relativement simple : écrire une fonction qui prend en
argument un tableau de chaînes de caractères et un prénom, et renvoie
le même tableau avec, à la fin, la chaîne "Bonjour <prénom> !".

En PHP, c'est très simple à faire :

function f ($tableau, $prenom)
{
array_push ($tableau, "Bonjour " . $prenom . " !");
return $tableau;
}

En C++, c'est à peu près la même chose :

vector<string> f (vector<string> tableau, string prenom)
{
tableau.push_back ("Bonjour " + prenom + " !");
return tableau;
}

(En pratique, il y aurait des subtilités d'optimisation, mais le code
ci-dessus fonctionne et fait ce qu'on veut.)


En C, je ne me risquerais même pas à proposer une implémentation.
Il faudrait :
- passer à la fonction l'emplacement mémoire des données du
tableau et le nombre d'éléments, ainsi que le prénom
- calculer le nombre d'octets de la nouvelle chaîne
- allouer la mémoire nécessaire
- copier les octets pour remplir la nouvelle chaîne
- calculer la taille du nouveau tableau
- allouer la mémoire nécessaire
- copier l'ancien contenu du tableau, puis le nouvel élément.
Il y a pas mal d'occasions de se tromper, et une erreur peut être
passablement difficile à dépister.

Note qu'en interne, le code C++ fait tout ça -- mais automatiquement,
sans que le programmeur n'ait à s'en occuper ni ne risque de se
tromper. Et, généralement, le programme ainsi créé est aussi rapide
qu'en C.



Le C++ a énormément de fonctionnalités (notamment en matière de POO et
de polymorphismes). Ça en fait un langage très riche, qu'on met des
années avant de connaître complètement.
Mais paradoxalement, on peut commencer à écrire des programmes
fonctionnels assez rapidement, et ensuite étudier les fonctionnalités
moins basiques au fur et à mesure des besoins.

Le C, au contraire, a relativement peu de fonctionnalités. On a
relativement vite fait le tour du langage en lui-même. Mais à cause de
ces fonctionnalités réduites, il faut pas mal de temps pour faire un
premier programme qui ne plante pas. Et même de bons programmeurs ont
énormément d'occasions de faire des erreurs.

<HS>J'aimerais ajouter le cas du PHP : il a lui aussi relativement peu
de fonctionnalités (c'est un langage très simple), mais une excellente
gestion des chaînes de caractères (meilleure que celle du C++), et
aucun accès direct à la mémoire. Ça évite les plantages, mais c'est
plus lent.
Ce qui n'empêche pas PHP d'avoir son propre lot de bugs "classiques".
Néanmoins, quand j'ai besoin d'une petite moulinette pour convertir du
texte, j'ai tendance à me tourner vers PHP.
</HS>



Honnêtement, je ne sais pas bien à quoi sert le C aujourd'hui, à part
peut-être pour des trucs très proches du système (noyau de système
d'exploitation, driver...), i.e. des domaines où il est en concurrence
avec l'assembleur.

Il y a aussi pas mal d'inertie : des gens qui ont appris le C y'a
longtemps et qui continuent, des profs qui ont étudié le C et qui
continuent à l'enseigner même quand leur cours s'appelle "C++", etc.

Enfin, le langage C++ a pas mal évolué ces dernières années. Du coup,
du code écrit pour g++ 2.9 n'est pas forcément compatible avec g++ 3
ou 4.


Dernier détail avant de laisser la parole aux autres : le C++ est bâti
sur le C. C'est-à-dire qu'on peut (presque) programmer en C++ comme on
le fait en C. Mais, en pratique, on ne le fait pas, car dans la
majorité des cas, il y a en C++ une méthode plus facile et plus
fiable.

Avatar
Fabien LE LEZ
On Fri, 19 Jan 2007 19:51:06 +0100, Pascal Bourguignon
:

Apprends C! Puis apprends C++!

Tu n'auras pas perdu de temps, car C++ est un sur-ensemble (à de trés
petits détails insifignifiants) de C.


Mouarf... Rajoute un gros smiley, tout de même. Si ça se trouve, l'OP
est vraiment un débutant qui pose la question sérieusement, et qui va
croire ce que tu racontes.

Avatar
Marc Boyer
Le 19-01-2007, a écrit :
Bonjour,

Comme j'hésite entre apprendre le C et apprendre le C++ , je cherche a
peser le pour et le contre; d'où ma question :
Quels sont les avantages du C et du C++ ?


Et bien, disons si c'etait de la menuiserie, C est une boite avec
un tres bon tournevis, une tres bonne scie a main, un tres bon
marteau et 3 tailles de clous et de vis. Avec ca tu peux tout faire.
C++ offre ces memes outils, mais aussi 8 scies electriques, 6 rabeaux,
4 agraffeuses, 75 types de colles, etc.

Les deux ont une norme assez longue et compliquee pour que deux
professionnels avec 10 ans d'experience puissent discuter des heures
sur un point de detail avant d'arriver a un compromis.

Ajoutons a cela que C est un vieu langage, bien connu, bien diffuse,
et plutot bien enseigne. Et c'est un monde qui aime bien les methodes
eprouvee, et qui repugne encore a utiliser une norme qui a deja 7 ans,
au cas ou elle serait mal supportee quelque part.
C++ est un langage plus jeune, et le debutant ne sais pas toujours
par quel bout le prendre. Les compilos evoluent, les gens aiment
tester les nouveautes, et un code qui compilait ici peut ne plus
compiler la.

Alors, le debutant qui veut vite faire mumuse avec sa scie sans
trop regarder le manuel peut vite se couper le doigt. Le debutant
qui est bien guide arrive assez vite a faire des choses bien plus
rapidement et de maniere plus robuste qu'en C.

En ce qui *te* concerne, il faudrait deja connaitre ton bagage.
Sais-tu ce qu'est une variable, une boucle, une fonction, un appel
recursif, un pointeur, une allocation dynamique, une variable
locale, une variable statique ?
Si tu sais tout cela, apprendre les bases de C ne sera pas
difficile. Et faire la meme chose en C++ non plus.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)

Avatar
Fabien LE LEZ
On Fri, 19 Jan 2007 20:12:54 +0000 (UTC), Marc Boyer :

et qui repugne encore a utiliser une norme qui a deja 7 ans,
au cas ou elle serait mal supportee quelque part.


Si tu parles bien de C++... Depuis quand y a-t-il une implémentation
pas trop lacunaire, de cette norme ?

C++ est un langage plus jeune, et le debutant ne sais pas toujours
par quel bout le prendre.


D'autant plus qu'il ne semble pas y avoir de livre en français pour
les débutants.

Avatar
Marc Boyer
Le 19-01-2007, Fabien LE LEZ a écrit :
On Fri, 19 Jan 2007 20:12:54 +0000 (UTC), Marc Boyer :

et qui repugne encore a utiliser une norme qui a deja 7 ans,
au cas ou elle serait mal supportee quelque part.


Si tu parles bien de C++... Depuis quand y a-t-il une implémentation
pas trop lacunaire, de cette norme ?


Non, je parlais de C.

C++ est un langage plus jeune, et le debutant ne sais pas toujours
par quel bout le prendre.


D'autant plus qu'il ne semble pas y avoir de livre en français pour
les débutants.


Oui. Faudrait faire une manif pour une edition francaise de
"Accelerated C++", ou les menacer d'une version francaise pirate.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)


Avatar
Marc Boyer
Le 19-01-2007, Fabien LE LEZ a écrit :
On Fri, 19 Jan 2007 20:45:36 +0000 (UTC), Marc Boyer :

D'autant plus qu'il ne semble pas y avoir de livre en français pour
les débutants.


Oui. Faudrait faire une manif pour une edition francaise de
"Accelerated C++", ou les menacer d'une version francaise pirate.


Au fait, aucun auteur n'a eu l'idée de faire un deuxième livre pour
débutants ?


Tres franchement, j'y ai pense, et je me suis demande ce que je
pouvais faire pour ne pas plagier Accelerated C++. Et je me suis
dit que je ferai mieu de le traduire...

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)



Avatar
Fabien LE LEZ
On Fri, 19 Jan 2007 20:45:36 +0000 (UTC), Marc Boyer :

D'autant plus qu'il ne semble pas y avoir de livre en français pour
les débutants.


Oui. Faudrait faire une manif pour une edition francaise de
"Accelerated C++", ou les menacer d'une version francaise pirate.


Au fait, aucun auteur n'a eu l'idée de faire un deuxième livre pour
débutants ?


Avatar
Fabien LE LEZ
On Fri, 19 Jan 2007 20:52:45 +0000 (UTC), Marc Boyer :

Au fait, aucun auteur n'a eu l'idée de faire un deuxième livre pour
débutants ?


Tres franchement, j'y ai pense, et je me suis demande ce que je
pouvais faire pour ne pas plagier Accelerated C++. Et je me suis
dit que je ferai mieu de le traduire...


As-tu essayé de contacter l'éditeur ou l'auteur ?


Avatar
Radamanthe
Pascal Bourguignon wrote:
writes:
Comme j'hésite entre apprendre le C et apprendre le C++ , je cherche a
peser le pour et le contre; d'où ma question :
Quels sont les avantages du C et du C++ ?


Certains ont la théorie que ce ne sont pas le même langage, mais ce
n'est pas mon avis.


Le problème, c'est qu'à défaut de théorie, c'est une réalité...

Ta question me semble étrange!


Pourquoi étrange ? Considérer C et C++ comme 2 languages différents est
au contraire la meilleure façon d'appréhender le problème du choix, car
dans l'absolu, oui, ce sont 2 languages différents. C++ a peut-être
emprunté le nom, la syntaxe et la sémantique de C pour construire tout
son toutim par-dessus, mais la grande majorité des détails
"insignifiants" qui les différencie n'est pas de cet ordre, à commencer
par le paradigme dominant.

Apprends C! Puis apprends C++!

Tu n'auras pas perdu de temps


Certes, si l'apprentissage de 2 languages ne demande finallement rien
d'insurmontable et, dans le fond, permet d'affiner ses connaissances, le
cas spécifique où les 2 languages sont C et C++ (dans cet ordre) reste
un sujet controversé. Bref, ça fleure bon le troll, mais je me demande
finallement si c'est pas trop gros pour ça.

car C++ est un sur-ensemble (à de trés petits détails insifignifiants) de C.


J'aime beaucoup le "trés" suivi de l'amusant "petits détails" appuyé du
magnifique "insifignifiants". Chaque faute d'orthographe semble reflêter
l'inadéquation des mots que tu emploies, comme si tu savais dans le fond
que c'est faux.


--
R.N.


1 2 3 4 5