Accueil > Technologies numériques > Développement > C, C++ et C#… Quelles différences entre ces langages de programmation ?

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

Publié le 27 mai 2021

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#.

Différence entre 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.

Sa dernière version stable est la C17 de juin 2018. La dernière version preview est la C23 d’avril 2023.

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 multiparadigme : 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’orientation 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…

Sa dernière version est C++20 de décembre 2020.

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# 11 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’autre 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++…

Sa dernière version est C# 11 de novembre 2022.

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ébutants accepté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 !

Notre expert

Fabien BRISSONNEAU

Développement logiciel et web

Architecte, développeur et formateur chez Eixa6, il est impliqué dans de nombreux projets depuis des années, du desktop au […]

domaine associé

Développement logiciel

formations associées

Programmation objet en C++

C#, développer en .NET avec Visual Studio

Programmation en C