151 votes

Pourquoi utiliser le C plutôt que le C++ ?

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 ?

145voto

Adam Davis Points 47683

La réponse de Joel est bonne pour des raisons que vous pourriez ont pour utiliser le C, mais il y en a quelques autres :

  • Vous devez respecter les directives du secteur, qui sont plus faciles à prouver et à tester en C
  • Vous disposez d'outils pour travailler avec le C, mais pas avec le C++ (ne pensez pas seulement au compilateur, mais à tous les outils de soutien, de couverture, d'analyse, etc.)
  • Vos développeurs cibles sont des gourous du C
  • Vous écrivez des pilotes, des noyaux ou d'autres codes de bas niveau.
  • Vous savez que le compilateur C++ n'est pas bon pour optimiser le type de code que vous devez écrire.
  • Non seulement votre application ne se prête pas à une orientation objet, mais elle serait plus difficile à écrire sous cette forme.

Dans certains cas, cependant, vous pourriez veulent d'utiliser le C plutôt que le C++ :

  • Vous voulez les performances de l'assembleur sans avoir à coder en assembleur (le C++ est, en théorie, capable de performances "parfaites", mais les compilateurs ne sont pas aussi bons pour détecter les optimisations qu'un bon programmeur C pourrait voir).

  • Le logiciel que vous écrivez est trivial, ou presque - sortez le petit compilateur C, écrivez quelques lignes de code, compilez et vous êtes prêt - pas besoin d'ouvrir un énorme éditeur avec des aides, pas besoin d'écrire des classes pratiquement vides et inutiles, de s'occuper des espaces de noms, etc. Vous pouvez faire presque la même chose avec un compilateur C++ et utiliser simplement le sous-ensemble C, mais le compilateur C++ est plus lent, même pour les petits programmes.

  • Vous avez besoin de performances extrêmes ou d'un code de petite taille et vous savez que le compilateur C++ rendra la tâche plus difficile en raison de la taille et des performances des bibliothèques.

Vous prétendez que vous pourriez simplement utiliser le sous-ensemble C et compiler avec un compilateur C++, mais vous constaterez que si vous faites cela, vous obtiendrez des résultats légèrement différents selon le compilateur.

Quoi qu'il en soit, si vous faites cela, vous utilisez C. Votre question est-elle vraiment "Pourquoi les programmeurs C n'utilisent-ils pas les compilateurs C++ ?". Si c'est le cas, alors soit vous ne comprenez pas les différences de langage, soit vous ne comprenez pas la théorie du compilateur.

123voto

plan9assembler Points 2209

J'aime le minimalisme et la simplicité.

70voto

Joel Coehoorn Points 190579
  • Parce qu'ils savent déjà que C
  • Parce qu'ils construisent une application embarquée pour une plateforme qui ne dispose que d'un compilateur C.
  • Parce qu'ils maintiennent des logiciels hérités écrits en C.
  • Vous écrivez quelque chose du niveau d'un système d'exploitation, d'un moteur de base de données relationnelle ou d'un moteur de jeu vidéo 3D de détail.

61voto

Andrew Grant Points 35305

Les craintes en matière de performances ou de gonflement ne sont pas une bonne raison de renoncer au C++. Chaque langage a ses pièges potentiels et ses compromis - les bons programmeurs apprennent à les connaître et développent si nécessaire des stratégies d'adaptation, les mauvais programmeurs se trompent et accusent le langage.

Python interprété est à bien des égards considéré comme un langage "lent", mais pour les tâches non triviales, un programmeur Python compétent peut facilement produire un code qui s'exécute plus rapidement que celui d'un développeur C inexpérimenté.

Dans mon secteur d'activité, les jeux vidéo, nous écrivons du code haute performance en C++ en évitant des éléments tels que RTTI, les exceptions ou les fonctions virtuelles dans les boucles internes. Ces éléments peuvent être extrêmement utiles, mais ils posent des problèmes de performance ou de gonflement qu'il est souhaitable d'éviter. Si nous devions aller un peu plus loin et passer entièrement au C, nous gagnerions peu et perdrions les constructions les plus utiles du C++.

La principale raison pratique de préférer le C est que le support est plus répandu que le C++. De nombreuses plates-formes, notamment les plates-formes embarquées, ne disposent même pas de compilateurs C++.

Il y a aussi la question de la compatibilité pour les vendeurs. Alors que le C dispose d'une ABI (Application Binary Interface) stable et bien définie, ce n'est pas le cas du C++. L'ABI du C++ est plus compliquée en raison de choses telles que les vtables et les constructeurs/destructeurs. Elle est donc mise en œuvre différemment selon les fournisseurs, et même selon les versions de la chaîne d'outils d'un fournisseur.

Concrètement, cela signifie que vous ne pouvez pas prendre une bibliothèque générée par un compilateur et la lier avec du code ou une bibliothèque provenant d'un autre compilateur, ce qui crée un cauchemar pour les projets distribués ou les fournisseurs de middleware de bibliothèques binaires.

50voto

Dinah Points 15711

Je suis d'un autre avis : pourquoi utiliser C++ au lieu de C ?

Le livre Le langage de programmation C (alias : K&R) vous explique clairement comment faire tout ce que le langage peut faire en moins de 300 pages. C'est un chef-d'œuvre de minimalisme. Aucun livre sur le C++ ne s'en approche.

Le contre-argument évident est que l'on pourrait dire la même chose de la plupart, sinon de toutes les langues modernes - elles ne peuvent pas non plus vous dire comment tout faire en seulement quelques centaines de pages. C'est vrai. Alors pourquoi utiliser C++ à la place ? Richesse des fonctionnalités ? La puissance ? Si vous avez besoin de quelque chose de plus riche en fonctionnalités ou de plus puissant, alors allez-y avec C#, Objective C, Java, ou quelque chose du genre. Pourquoi s'encombrer des complexités du C++ ? Si vous avez besoin du degré de contrôle qu'offre le C++, je plaide pour l'utilisation du C. Le C peut tout faire et le faire bien.

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