Bien que les gens semblent aimer se plaindre à propos du C++, je n'ai pas pu trouver beaucoup d'éléments expliquant pourquoi vous voudriez choisir le C plutôt que le C++. Le C ne semble pas recevoir autant de critiques et si le C++ a tous ces problèmes, pourquoi ne pas se limiter au sous-ensemble C ? Quelles sont vos réflexions/expériences ?
Réponses
Trop de publicités?La plupart des fonctionnalités importantes de C++ impliquent d'une manière ou d'une autre des classes ou des modèles. Ce sont des fonctionnalités merveilleuses, sauf pour la façon dont le compilateur les transforme en code objet. La plupart des compilateurs utilisent la manipulation des noms, et ceux qui ne le font pas font quelque chose d'au moins aussi désordonné.
Si votre système vit en autarcie, comme c'est le cas de nombreuses applications, le C++ est un bon choix.
Si votre système doit interagir avec des logiciels qui ne sont pas nécessairement écrits en C++ (le plus souvent en assembleur ou en bibliothèques Fortran), vous êtes dans une situation délicate. Pour interagir avec ce genre de cas, vous devrez désactiver la gestion des noms pour ces symboles. Cela se fait généralement en déclarant les objets suivants extern "C"
mais ils ne peuvent pas être des modèles, des fonctions surchargées ou des classes. Si ces fonctions sont susceptibles de constituer l'API de vos applications, vous devrez les envelopper avec des fonctions d'aide et faire en sorte que ces fonctions soient synchronisées avec les implémentations réelles.
Et en réalité, le langage C++ fournit une syntaxe standard pour des fonctionnalités qui peuvent être facilement implémentées en C pur.
En bref, les frais généraux d'un C++ interopérable sont trop élevés pour que la plupart des gens puissent les justifier.
Oh mon dieu, C vs C++, une bonne façon de commencer une guerre de mots :)
Je pense que le C est meilleur pour les pilotes et le code embarqué.
Le C++ possède des fonctionnalités intéressantes que le C n'a pas, mais de nombreuses fonctionnalités orientées objet du C++ peuvent causer des désordres de codage monumentaux lorsque les gens écrivent du code avec des effets secondaires non évidents qui se produisent dans les coulisses. Le code fou peut être caché dans les constructeurs, les destructeurs, les fonctions virtuelles, etc. La beauté du code C est que le langage ne fait rien de non évident derrière votre dos, ainsi vous pouvez lire le code et ne pas avoir à regarder chaque constructeur et destructeur et ainsi de suite. Une grande partie du problème est due aux mauvaises pratiques de codage de CERTAINES personnes.
Le langage idéal pour moi serait une combinaison de C99 et d'un sous-ensemble minimal de fonctionnalités C++ plus sûres, qui ajouterait ZERO (ou presque zéro) surcharge du compilateur à la sortie binaire. Les ajouts parfaits seraient l'encapsulation des classes et les concepts de dénomination des données et des fonctions.
Une remarque à propos de "utilisez simplement le sous-ensemble de C++ que vous voulez utiliser" : le problème avec cette idée est qu'il y a un coût à imposer que tout le monde dans le projet utilise le même sous-ensemble. Mon opinion personnelle est que ces coûts sont assez élevés pour les projets faiblement couplés (par exemple les projets open source), et aussi que le C++ a totalement échoué à être un meilleur C, dans le sens où vous ne pouvez pas utiliser le C++ là où vous avez utilisé le C.
Je n'ai pas été en mesure de trouver beaucoup de preuves quant à la raison pour laquelle vous voudriez choisir le C plutôt que le C++.
Vous pouvez difficilement appeler ce que je vais dire une preuve ; c'est juste mon opinion.
Les gens aiment le C parce qu'il s'adapte parfaitement à l'esprit du programmeur.
Les règles du C++ sont nombreuses et complexes [quand faut-il des destructeurs virtuels, quand peut-on appeler des méthodes virtuelles dans un constructeur, comment interagissent la surcharge et la surcharge, ...], et les maîtriser toutes demande beaucoup d'efforts. De plus, entre les références, la surcharge des opérateurs et la surcharge des fonctions, la compréhension d'un morceau de code peut vous obliger à comprendre d'autres codes qui ne sont pas forcément faciles à trouver.
Une autre question est de savoir pourquoi les organisations préfèrent le C au C++. Je n'en sais rien, je ne suis qu'un peuple ;-)
À la décharge du C++, il apporte des fonctionnalités précieuses ; celle que j'apprécie le plus est probablement le polymorphisme paramétrique ('ish), cependant : les opérations et les types qui prennent un ou plusieurs types comme arguments.