Avantages comparatifs entre C et C ++ pour les nouveaux projets

Pour chaque nouveau programme ou bibliothèque de bas niveau que j’écris sur les systèmes POSIX, je dois toujours commencer par prendre la décision initiale: est- ce que je l’écris dans C ou si je vais avec C ++? J’aime penser que chaque fois que je prends une décision relativement éclairée, je me demande s’il manque quelque chose.

Ce n’est pas une meilleure question, mais plutôt quels aspects de chacun sont meilleurs ? Probablement, chacun a des forces convaincantes. Dans quels cas devrais-je choisir l’un au lieu de l’autre?

Par exemple, voici quelques points que je considère. Qu’est-ce qu’il me manque d’autre?

Favoriser C

  • Compatibilité : pratiquement tous les langages et tous les frameworks disposent de mécanismes d’interfaçage avec le code écrit en C.
  • Simplicité : le code de débogage vous permet de vieillir plus rapidement
  • Popularity : Pensez à toutes vos applications préférées, serveurs, interprètes et autres outils. Les chances sont que la plupart d’entre elles sont écrites en C, même si C ++ était disponible au démarrage. Tous les enfants cool utilisent C.

Favoriser C ++

  • La STL : Vous pouvez certainement implémenter votre propre algorithme RB-tree, quicksort ou double-link. Mais ce ne sera probablement pas aussi bon.
  • Modèles : Bien sûr, c’est une fonction de pré-processeur qui se fait passer pour une fonctionnalité de langage, mais elle est très pratique.
  • Classes : C ++ n’est pas exactement smalltalk, mais au moins ce n’est pas un langage d’assemblage sophistiqué.
  • Compatibilité : Vous pouvez toujours utiliser C dans un projet C ++.

C ++ a simplement beaucoup plus de fonctionnalités que C. Cela en fait un langage plus complexe. Mais l’avantage de ces fonctionnalités est que vous devrez écrire (et maintenir) moins de code.

Vous n’êtes pas obligé d’utiliser des templates, stl, des exceptions, des surcharges de fonctions ou toute autre fonctionnalité C ++. Mais si votre problème ne nécessite qu’une de ces fonctionnalités, votre programme sera plus lisible si vous le faites en C ++, plutôt que d’émuler les fonctionnalités manquantes dans C.

Je pense que vous rendez les choses plus compliquées qu’elles ne le sont réellement. Quelle langue êtes-vous le plus à même d’exprimer votre idée? Si ni l’un ni l’autre, et si vous êtes un débutant à la fois, utilisez C; Sinon, si vous êtes doué, choisissez ce que vous voulez. Sinon, cela ne compte pas autant que de commencer.

Alice : Voulez-vous me dire, s’il vous plait, de quelle façon je devrais partir d’ici?

The Cat : Cela dépend beaucoup de l’endroit où vous voulez vous rendre

Alice : Je me fiche pas mal où.

Le chat : Peu importe la manière dont vous allez.

Alice : tant que j’arrive quelque part.

Le chat : Oh, tu es sûr de faire ça, si seulement tu marches assez longtemps.

Vous avez oublié de mentionner qu’en C ++, il existe des destructeurs qui sont appelés automatiquement, donc, lorsqu’ils sont utilisés correctement (RAII), vous n’avez pas à vous soucier de la libération de ressources. Une autre fonctionnalité intéressante concerne les exceptions qui pourraient faciliter la gestion des erreurs et la rendre plus facile à gérer.

Pour moi, il n’y a que deux raisons d’utiliser C. Premièrement, si le code doit être extrêmement portable (pour être utilisé comme bibliothèque dans différents langages et / ou systèmes d’exploitation), et ensuite si vous avez besoin de vitesse brute, n’est généralement pas un gros problème car C ++ ne fonctionne généralement que légèrement plus lentement que c (sans les fonctionnalités OO).

J’apprécie vraiment les fonctionnalités OO de C ++, qui si elles sont utilisées correctement peuvent rendre la vie beaucoup plus facile lors du développement d’applications.

On dirait que vous préférez le C sur C ++. Moi aussi. Cependant, la facilité d’utilisation est le facteur le plus important dans la programmation. C ++ a un meilleur support des chaînes et plus de bibliothèques, donc pour les projets non sortingviaux, tels que l’access à la firebase database et d’autres choses du même genre, optez pour C ++. Si vous visez une plate-forme croisée et que vous souhaitez peut-être travailler à un niveau inférieur, utilisez C. De plus, ils sont tous les deux identiques.

C ++ est meilleur dans presque tous les sens: plus sûr, plus efficace, fonctionne mieux dans les grands projets … La seule exception est que vous ne pouvez pas l’utiliser lorsque vous êtes en interface avec d’autres langages. Mais dans ce cas, vous utilisez toujours C ++ et ajoutez une petite couche C pour la partie d’interfaçage.

C présente certains avantages par rapport à C ++ au début d’un projet, il est plus simple, plus facile et nécessite moins de décisions de conception. Cependant , à mesure que le projet se développe, les avantages du C ++ et du code orienté object, qui sont essentiellement: l’encapsulation, l’abstraction et le masquage des informations, augmentent également. L’inconvénient est généralement un code légèrement plus lent, sauf si vous cassez l’encapsulation.

Oui, il est également possible d’écrire comme C ++ en C, mais c’est beaucoup plus complexe et difficile à maintenir.

Quand j’ai le choix, je vais avec un sous-ensemble de C ++.

  • compatibilité – pas un problème, vous pouvez utiliser extern “C” pour la liaison avec les bibliothèques C
  • simplicité – évitez les modèles, les opérateurs de surcharge et les autres fonctionnalités C ++ qui masquent le code

Vous obtenez toujours les avantages des classes et du RAII.