C, C++ et C#… Quelles différences entre ces langages de programmation ? 2


Temps de lecture : 4 minutes
Share Button
langages de programmation - ORSYS

Ils figurent souvent ensemble en tête des classements des langages les plus populaires, et pour de bonnes raisons. Petit tour d’horizon des atouts (et inconvénients) propres à C, C++ et C#.

Les langages de programmation C, C++ et C# présentent des similitudes qui laissent imaginer une filiation. Et effectivement, le C est le précurseur et a été suivi de C++ et C#, chacun apportant des évolutions intéressantes quoique dans des directions différentes.

Le C, langage de la performance

Inventé en 1972 dans l’idée d’accompagner la création du système UNIX, le langage C fait ainsi passer ses auteurs, Kernighan et Ritchie, à la postérité. Il est d’abord normalisé sous le nom « C ANSI », puis par des normes ISO. Les versions se succèdent encore, continuant de faire évoluer le langage de programmation.

Le C permet au développeur une maîtrise fine de la machine, un accès direct à la mémoire. Lorsqu’il est inventé, il est un langage bien plus lisible que tout ce qui se fait à l’époque. Aujourd’hui considéré comme un langage de bas niveau, il permet néanmoins, s’il est bien utilisé, l’écriture de programmes très performants et proches du matériel. Il est mis en œuvre pour écrire toutes les briques élémentaires utilisées dans d’autres technologies (à commencer, par exemple, par les machines virtuelles Java).

Sa syntaxe est reprise par de nombreux langages lui ayant succédé. Le C propose en effet une approche séquentielle. Cela signifie que les instructions sont exécutées dans l’ordre de la séquence. Un point d’entrée dans l’application est appelé « main ». Le code peut être organisé en fonctions, avec des paramètres en entrée, en entrée-sortie, et en retour. Il supporte donc la programmation dite « procédurale ». Les variables globales sont autorisées.

Enfin, le code C manipule très souvent directement les cases mémoires allouées. Cela permet d’être très précis dans sa gestion… mais exige une grande attention de la part du développeur.

Le C++, un langage orienté objet

Le langage C++ a, pour sa part, été mis au point par Bjarne Stroustrup en 1979. Compatible avec le C, mais pensé en tant que langage orienté objet, il permet la mise en œuvre d’abstractions de plus haut niveau que le C.

Le C++ reste un langage multi paradigmes : il permet la programmation impérative, orientée objet et fonctionnelle. Le concept de template permet une programmation générique. Le langage reste fortement typé, la compilation peut être assez stricte, mais un grand nombre d’options est possible, ce qui laisse le programmeur largement responsable. Le principal écueil du langage reste l’accès à la mémoire, via les pointeurs, et l’obligation faite au développeur de libérer toutes les ressources qu’il s’est allouées. La mémoire est allouée soit sur la pile, soit sur le tas, à la discrétion du développeur.

Les versions récentes du langage et de la bibliothèque standard (de 2014 à 2020) ont considérablement amélioré la lisibilité et la fiabilité du code. En particulier via l’implémentation de patterns (smart pointers) et l’utilisation accrue de la programmation générique. Normalisé depuis 1998 par l’ISO, ce langage a suivi plusieurs évolutions dont la plus importante est le C++11. Sa différence la plus immédiate avec le C est le support des classes et des principes de l’orienté objet. Les compilateurs C++ sont en général plus stricts que les compilateurs C. Beaucoup de développeurs ont donc utilisé du C++ juste pour encapsuler des bibliothèques C. À noter qu’il existe un C++ managé qui s’utilise exclusivement dans le cadre de la plateforme .Net…

C#, .Net et Microsoft

Le langage C#, à prononcer « C sharp », a quant à lui vu le jour en 2002. Il est pensé comme le langage principal de la plateforme .Net, de Microsoft : il reprend en grande partie la syntaxe de Java, tout en ajoutant tous les éléments de IL, langage intermédiaire utilisé par le composant de machine virtuelle (CLR) de l’architecture .Net.

Avec cette technologie, le développeur dispose d’une bibliothèque standard très étendue. Les évolutions successives, jusqu’à C# 9 aujourd’hui, suivent les évolutions de la plateforme .Net. C# est ainsi utilisable avec toutes sortes d’applications, de l’application console à l’application web. Le lien avec le C++ est évident – comme avec Java du reste. Ses caractéristiques syntaxiques sont donc intermédiaires entre Java (une syntaxe stricte et simple) et le C++ (une complexité liée à l’utilisation directe de la mémoire, surcharge des opérateurs).

Le C# propose beaucoup de sucre syntaxique, c’est-à-dire d’éléments de syntaxe simples qui génèrent un code relativement complexe. Par exemple le délégué, qui est la mise en œuvre d’un observateur mais qui se présente comme un pointeur de fonction C, ou bien la gestion des propriétés, qui ne sont rien d’autres que les getter et setter du C++. La programmation générique a été introduite dans C#, offrant la possibilité de créer des familles de classes qui s’adaptent à des types inconnus au moment de leur écriture.

La grosse différence par rapport au C++ tient au respect des contraintes de l’architecture .Net. Celle-ci vise à écrire des applications de confiance, maîtrisées par le CLR. En particulier parce que la mémoire est gérée par un ramasse-miettes dont le rôle est de garder la mémoire disponible. On notera l’absence de variables et de fonctions globales en C#, qui en fait un langage beaucoup plus pur objet que le C++…

En conclusion ?

Sachant tout cela, il devient plus facile de faire son choix parmi ces trois langages de programmation. Opter pour le C est la garantie d’apprendre la base, mais peut-être d’une façon un peu rude, du fait de sa complexité. Débutant(e)s accepté(e)s, à condition de s’accrocher !

Avec le C++, en revanche, les concepts objets et la programmation générique étoffent les possibilités, et la bibliothèque standard, fortement enrichie ces dernières années, permet de se simplifier la vie dans certains cas.

Enfin, avec le C#, petit dernier de la série, nous sommes en présence d’un langage évolué, qui simplifie beaucoup d’aspects de la construction de l’application… D’autant plus que l’on s’appuie alors sur le framework .Net. Il ne vous reste plus, à présent, qu’à déterminer lequel de ces langages sera le plus adapté à votre projet !


Relire aussi : Le top 5 des langages de programmation

Pour se former :

Fabien Brissonneau - ORSYS

Fabien Brissonneau

Il est architecte, développeur et formateur chez Eixa6. Impliqué dans de nombreux projets depuis des années, du desktop au web en passant par le mobile, il met l’accent en général sur la lisibilité et la maintenabilité du code. Il a suivi l’évolution des langages à travers les développements et se passionne aujourd’hui pour les architectures micro-services et leurs mise en œuvre sur Kubernetes.

Share Button

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

2 commentaires sur “C, C++ et C#… Quelles différences entre ces langages de programmation ?

  • Philippe Maurisset

    Il faut aussi mentionner que le C# est supporté par toutes les plateformes .NET : non seulement les framework – disponibles sur Windows seulement – mais aussi .NET core, qui est open source et multi-plateforme (dernière version : NET 5).
    NET 5 n’a certes pas toutes les bibliothèques de classes dont disposent les frameworks, mais cette portabilité – associée aux évolutions du langage autour de la programmation par Task – le rendent attractif, et les contributions open source s’accumulent pour couvrir les besoins.