121 votes

Pourquoi limiter artificiellement votre code au C ?

Cette question fait suite à une réponse que j'ai donnée à une personne de l'Union européenne. question actuelle qui pose la question d'une bibliothèque générique pour le C - l'auteur de la question précise qu'il ne veut pas utiliser le C++. La question que je lui pose, ainsi qu'aux autres personnes qui insistent pour utiliser le C, est la suivante : pourquoi le font-ils alors qu'ils le font ?

  • C++ fournit les caractéristiques spécifiques qu'ils demandent
  • Leur compilateur C est presque certainement en réalité un compilateur C++, ce qui n'a aucune incidence sur le coût du logiciel.
  • Le C++ est tout aussi portable que le C
  • Le code C++ peut être aussi efficace que le C (ou plus, ou moins).

Veuillez noter : Je n'ai pas l'intention d'argumenter - je suis sincèrement intéressé par les motivations du choix de la langue.

Edit : Il a été suggéré qu'il s'agissait d'un doublon, mais je ne le pense pas. Pour clarifier, je m'intéresse aux raisons pour lesquelles les gens se limitent au sous-ensemble C. Par exemple, l'auteur du message auquel j'ai fait référence aurait pu conserver tout son ancien code C et se contenter d'utiliser les conteneurs génériques C++ comme "meilleurs tableaux" - je m'intéresse à la raison pour laquelle les gens sont si réfractaires à cette idée. Je ne suis pas intéressé par les raisons pour lesquelles vous devriez ou ne devriez pas apprendre le C ou le C++.

Le message de Peter Kirkham était pour moi le plus instructif, en particulier en ce qui concerne les questions relatives à la C99 que je n'avais pas prises en compte, et je l'ai donc accepté. Merci à tous les autres participants.

1voto

Rob deFriesse Points 116

La plupart des programmeurs considèrent comme acquis que tout le monde considère la qualité comme une priorité élevée. Ce n'est pas toujours le cas. Si vous êtes habitué au C, le C++ peut sembler en faire trop pour vous dans les coulisses. La rigueur de la vérification des types en C++ peut également sembler contraignante. De nombreuses personnes sont prêtes à prendre le risque d'introduire les types de bogues que le C++ peut aider à prévenir pour éviter ces "nuisances".

1voto

ferdystschenko Points 811

La portabilité peut être un problème. Différent de la réponse de Gordon Carpenter-Thomp, je suggérerais que c'est plutôt le support d'exécution de différentes versions de libstdc++ sur différentes versions de linux/unix. Voir ce lien pour une bonne discussion à ce sujet. Un petit extrait :

Le code de support d'exécution utilisé par les différentes parties d'une application C++ doit être compatible. Si une partie du programme a besoin de dynamic_cast ou d'attraper des objets fournis par une autre, les deux parties doivent se mettre d'accord sur certains détails d'implémentation : comment trouver les vtables, comment dérouler la pile, etc.

Pour le C++ et quelques autres langages supportés par GCC ayant des caractéristiques similaires, ces détails sont spécifiés par une ABI C++. Chaque fois que l'ABI utilisée par GCC change, vous vous retrouvez avec des bibliothèques incompatibles produites par les différentes versions de GCC. La même chose est vraie pour le C, mais l'ABI du C est beaucoup plus simple et existe depuis beaucoup plus longtemps, donc elle est assez stable.

1voto

Calmarius Points 2626

La chose la plus utile que j'ai trouvée en C est l'absence d'espaces de noms et de surcharges : les noms de fonctions et de symboles sont des identifiants uniques. Pour trouver les endroits où ces symboles sont utilisés, vous pouvez simplement grep à travers les fichiers du code source et les résultats de la recherche montreront les emplacements.

C'est essentiel lorsqu'il s'agit de câbler une nouvelle fonction ou un nouveau composant dans un système ancien et embrouillé.

Vous ne pouvez pas le faire facilement en C++, sans un outil sophistiqué de construction de graphe d'appels.

1voto

dsh Points 31

Les raisons suivantes sont autant de raisons pour lesquelles il peut être bénéfique de limiter un projet à C :

  • une compilation plus rapide car le langage est beaucoup plus simple
  • nécessite moins de support d'exécution, ce qui le rend plus adapté aux environnements de bas niveau.
  • beaucoup plus facile à interfacer avec d'autres langues
  • supporte les tableaux de taille variable sur la pile
  • le code d'assemblage est plus facile à lire car il n'y a pas de mélange de noms.
  • permet de combiner facilement le code produit par différents compilateurs puisqu'il s'agit de l'interface binaire d'application standard de facto

0voto

Philip Points 2926

La plupart des gens semblent penser que le C et le C++ sont liés d'une manière ou d'une autre, mais ils se trompent lourdement. Le C++ est un langage complètement différent du C.

En C++, vous pensez en termes d'objets et de la façon dont ils sont liés les uns aux autres. En C, on pense en termes d'API. C'est comme la différence entre le jour et l'année 17.

Une mauvaise analogie : si quelqu'un ajoute le chinois à l'anglais et l'appelle anglais++, vous ne vous sentiriez probablement pas à l'aise pour ajouter une ligne en chinois à votre dernière lettre d'amour, car il est tellement plus facile d'exprimer l'amour dans cette partie de l'anglais++.

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