38 votes

Sauf la POO, pourquoi C++ est-il meilleur que C?

Eh bien, cela peut sembler être une question troll, mais puisque C++ semble difficile à maîtriser pleinement (et je n'ai jamais vraiment su que STL faisait réellement "partie" de celui-ci), je voulais savoir quels sont les inconvénients d'utiliser C au lieu de C++ lorsque l'on ne dépend pas beaucoup de la POO.

Parfois, C++ peut avoir une syntaxe très sophistiquée, ce qui me perturbe un peu lorsque j'essaie d'utiliser OGRE3D par exemple...

3 votes

La syntaxe de C++ est-elle vraiment plus difficile que celle de C ? Et depuis quand est-il facile de maîtriser C ? :)

24 votes

@George, +1. Qui dit que C++ est meilleur que C, de toute façon?

2 votes

Et pourquoi "sauf OOP"? Tout langage pourrait être considéré comme inférieur à un autre si vous imposez des restrictions arbitraires sur l'ensemble des fonctionnalités ou l'utilisation normale.

72voto

sepp2k Points 157757

Fonctionnalités non orientées objet que C++ possède et que C n'a pas :

  1. Modèles (Templates)
  2. Surdéfinition de fonctions (Function overloading)
  3. Références (References)
  4. Espaces de noms (Namespaces)
  5. Vous pouvez utiliser les struct et enum sans écrire struct ou enum avant chaque déclaration ou utiliser des typedefs.
  6. Même si vous ne définissez pas vos propres classes, utiliser les chaînes de caractères et les conteneurs de C++ est souvent plus pratique et sûr à manipuler que les chaînes de caractères et les tableaux de style C.
  7. Sécurité de type (même si certains la considèreraient faible)
  8. Exceptions (Exceptions)
  9. Déclarations de variables dans les conditionnelles, C99 ne permet de le faire que dans les for

8 votes

8. les déclarations de variables dans des conditionnels, C99 ne les a que dans for

0 votes

@Jens: Je viens de découvrir quelque chose de nouveau.

4 votes

La sécurité des types est probablement le premier et le plus grand avantage pour un programmeur C expérimenté.

25voto

Robert S. Barnes Points 17244

Je suis un grand fan de C qui est devenu au fil du temps un grand fan de C++. Une des principales raisons pour cela est la STL ( la Bibliothèque de modèles standard ) et Boost.

En combinant les deux, il est très facile d'écrire des applications puissantes et portables.

0 votes

Notez que STL et Boost reposent tous deux sur l'attribut POO du langage C++.

15voto

Lorenzo Points 2772

Pourquoi C++ est-il meilleur que C? Mis à part la liste évidente des fonctionnalités, à mon avis la vraie réponse est que il n'y a pas de bonne raison d'utiliser encore C au lieu de C++. Même si vous n'utilisez pas la POO, vous pouvez l'utiliser comme un meilleur C. Même si vous n'utilisez qu'une fois une fonctionnalité unique de C++ dans votre programme, C++ est déjà gagnant.

D'un autre côté, il n'y a aucun inconvénient à utiliser C++ : il conserve les objectifs de performance de C et c'est un langage de bas niveau permettant des choses très puissantes. Et vous ne manquerez aucune fonctionnalité de C en utilisant C++!

Et n'oubliez pas la large base d'utilisateurs et les riches bibliothèques et frameworks disponibles.

En passant, C99 a ajouté quelques fonctionnalités intéressantes mais après une décennie il y a encore un support de compilateur très limité (vous êtes donc limité à C ANSI). Pendant ce temps, C++ a évolué également et les vendeurs de compilateurs se sont engagés à fournir des implémentations conformes.

8 votes

Une bonne raison serait des compilateurs beaucoup plus rapides. La deuxième, il y a des appareils qui ne supportent toujours pas le C++.

5 votes

Des compilateurs plus rapides? Au cours des 15 dernières années, la recherche et le développement dans les compilateurs C/C++ sont presque entièrement pilotés par C++. Les gains de performance dans les compilateurs C sont une conséquence directe des améliorations des compilateurs C++. Et presque tous les dispositifs embarqués peuvent être programmés avec C++ (à l'exception des PICs très simples où vous utiliseriez de toute façon l'assembleur au lieu de C...).

7 votes

Raisons d'utiliser C: Parce qu'il a une spécification claire et lisible, compréhensible par presque tout le monde avec un petit peu de patience. Parce qu'il a une syntaxe formellement spécifiée. Parce que le nommage des fonctions est pénible dans certaines circonstances, même si vous pouvez contourner cela. Parce que C99 a toute une série de fonctionnalités intéressantes qui ne sont toujours pas présentes en C++. Parce que je traite fréquemment avec des plateformes qui n'ont pas de support C++.

14voto

Jerry Coffin Points 237758

Une "fonctionnalité" qui n'a pas été beaucoup mentionnée (mais que je trouve notable) est que la communauté des compilateurs C++ semble être prête à consentir beaucoup plus d'efforts pour produire des implémentations conformes. À l'époque où la norme qui est devenue finalement C89/90 était en cours de développement, presque chaque vendeur de compilateurs travaillait à se conformer aux derniers projets de la norme, et (surtout lorsque la norme était proche d'être complète) mettait vraiment beaucoup d'efforts pour se conformer le plus étroitement possible.

Ce n'est plus le cas. La norme C99 a été (assez évidemment) finalisée il y a plus d'une décennie, mais il y a encore essentiellement une seule implémentation qui fait sérieusement un effort pour se conformer à la norme entière (Comeau). Quelques autres (par exemple, gcc) ont ajouté quelques fonctionnalités C99, mais en manquent encore un bon nombre d'autres. Un (pcc) se trouve dans la position plutôt paradoxale d'avoir ajouté presque toutes les fonctionnalités spécifiques à C99, mais ne parvient pas très près à satisfaire aux exigences de C89/90.

Compte tenu de la complexité de C++, produire une implémentation conforme est une tâche beaucoup plus difficile. Malgré cela, je suppose qu'il y a déjà plus d'implémentations qui sont au moins très proches de se conformer à C++0x (qui devrait être ratifié d'ici un an ou deux) qu'avec C99 (ratifié il y a environ une décennie). Juste pour choisir un nombre arbitraire, je m'attends à voir 3 implémentations conformes1 de C++0x plus tôt que 3 implémentations conformes de C99 (en fait, je m'attendrais presque à autant le jour où elle sera ratifiée).

  1. Bien sûr, "conforme" dans ce cas signifie "dans une certaine mesure" -- je suis assez sûr que chaque implémentation de C et C++ a au moins quelques défauts qui empêchent une conformité parfaite. Il en va de même pour la plupart des autres langages, les seules exceptions évidentes étant les langages définis en fonction d'une implémentation particulière.

0 votes

C'est un point intéressant. Et je suis d'accord, c'est une différence assez remarquable. +1

1 votes

+1, mais : en dehors d'Edison Design Group et de l'équipe gcc, y a-t-il vraiment tant de fournisseurs de compilateurs C++ "originaux" (pas de "saveur") ? La force mentionnée de C++ pourrait en fait apparaître beaucoup plus "faible", je veux dire.

2 votes

@mlvljr : Microsoft développe sa propre interface pour Visual C++. Je suis d'accord avec le point de vue de Jerry, surtout depuis que certains grands fournisseurs (comme Microsoft) ont totalement abandonné la conformité aux normes C.

5voto

Puppy Points 90818

Les références sont faites automatiquement et beaucoup plus sûres par rapport aux pointeurs, la bibliothèque standard est bien plus étendue, les modèles rendent le code extrêmement personnalisable et considérablement plus rapide et sûr. C++ offre une utilisation/réutilisation fantastique du code et une organisation. De plus, si vous ne vous reposez pas beaucoup sur la POO, alors vous le faites mal. Il y a des moments où les objets ne sont pas appropriés, mais ce ne sont pas la majorité des scénarios.

6 votes

Les références sont des pointeurs constants + du sucre syntaxique. Il n'y a aucun avantage en termes de sécurité, et elles éliminent l'indication visuelle qu'une variable est passée par référence.

5 votes

@Ben: Tu ne sais tout simplement pas comment les utiliser. Un pointeur peut pointer vers un tableau, ce n'est pas possible avec une référence. Un pointeur peut avoir de nombreuses erreurs possibles, comme des niveaux d'indirection différents et des conversions de int. Aucune de ces choses n'arrive avec les références. Quand tu as un int&, un int est de l'autre côté. Quant à l'indication visuelle, elle est dans le &.

7 votes

@Mort : Hm ? Qu'en est-il de int array[10]; et int (&ref)[10] = array; ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X