Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Le tutoriel sur le langage C

Accueil C Compilation d'un programme C


Accès rapide :
Présentation
Historique du langage C
Les environnements de développement

Présentation

De tous les langages de programmation existant, le langage C est certainement le plus célèbre. Il a souvent, par le passé, été qualifié de langage universel. Dans le sens ou quasiment n'importe que système informatique peut être développé à partir de ce langage. A titre d'exemple, la plupart des systèmes d'exploitation actuels sont programmés en C (du moins le coeur de ces systèmes).

Comparé à d'autres langages (Java notamment), on peut dire que les programmes générés en C seront plus compacte, mais aussi bien plus efficace en termes de temps d'exécution. Cela vient du fait que le niveau d'abstraction de C est bien plus bas que celui de Java par exemple. On est plus proche de la machine, mais par contre on doit gérer plus de choses. Lorsque je dispense des formations, j'ai l'habitude de dire que C est en quelque sorte un "méga-assembleur" qui rajoute deux concepts clés : la notion de variable et celle de fonction. Mais si l'on considère l'arithmétique de pointeurs (on en reparlera plus tard) on a quasiment un contrôle total sur la machine. Dit autrement, C nous permettra (relativement à Java) de développer des applications bien plus rapides, mais en beaucoup plus de temps (la plus-value d'un langage comme Java étant la productivité). Plus on délègue des tâches à la machine, moins nous avons de choses à faire.

Du coup, plus le temps passe et plus les machines sont puissantes et donc plus les technologies modernes permettent de répondre à plus grand nombre de besoins. Peut-être que, dans un avenir plus ou moins proche, C va perdre de son panache. Mais disons que pour l'heure, les performances des machines étant ce qu'elles sont, nous avons encore souvent besoin de C (ou d'un langage équivalent).

Il n'est donc pas inutile de se former à C : vous en aurez certainement besoin dans votre carrière d'informaticien(ne). Disons aussi qu'il est, de mon point de vue, très important de bien maîtriser un langage proche de la machine, comme peut l'être C. Cela vous permettra de mieux appréhender les langages de plus haut niveaux tels que C++, Java, ...

Historique du langage C

Au début des années 1970, une équipe des "bell laboratories" commence à développer un système d'exploitation : cette équipe etait constituée de Kenneth L. Thompson et de Dennis M. Ritchie. Leur système d'exploitation semblait très prometteur et pour cause, il allait devenir un peu plus tard Unix. Mais à l'époque le code de ce système d'exploitation était codé en assembleur : cela posait un problème en termes de portabilité. Il a donc fallu inventer un nouveau langage de programmation plus « portable ² et permettant une réécriture du système d'exploitation. C'est Dennis M. Ritchie qui s'est focalisé sur la génération de ce nouveau langage de programmation en se basant sur les langages BCPL et B : le langage C est officiellement annoncé en 1973. Le futur système Unix à pu être réécrit en C à partir de cette date.

En 1978, Dennis M. Ritchie et Brian W. Kernighan publient « The C programming language » donnant ainsi une nouvelle dimension au langage C. Effectivement, certains éléments de syntaxe changent à cette époque et C prend la forme qu'on lui connaît aujourd'hui (notamment sur la manière de produire une fonction). De nos jours, ce livre (dans sa seconde édition) fait encore office de bible en la matière.

La nécessité de donner une définition complète et stable du langage se fit ressentir quand de multiples compilateurs C firent leurs apparitions : effectivement, au début des années 80, il existait plusieurs compilateurs C supportant leurs propres extensions. On peut donc dire qu'à cette époque il y avait plusieurs versions du langage C. Ainsi, en 1983, le comité ANSI (American National Standards Institute) débuta une phase de normalisation du langage. Cette étape se termina en 1989 : C-ANSI était né (aussi communément appelé C89). La seconde version du l'ouvrage « The C programming language » (précédemment cité), intégrant les éléments de syntaxe proposé par cette norme, apparaît à cette époque.

A la même époque (1983), Bjarne Stroustrup créa sa première version du langage C++. Celui-ci est une extension du langage C afin de permettre la programmation orientée objets. Plus tard, dans les années 95, Java prendra place parmi la grande lignée des langages dérivés de C. Quoi qu'il en soit, C (voir C++) reste à l'heure actuelle, le langage incontournable dans les domaines ou les performances (et les temps de réponses) sont de mises.

En 1990, le langage C est normalisé ISO (on parle alors de C90). En fait C89 (ANSI) et C90 (ISO) sont très similaires. En 1999, le comité ISO publie une seconde version de son standard : on parle alors de C99. Cette dernière évolution intègre beaucoup de points. En fait nombre de ces points proviennent de C++, mais ils étaient non directement rattachés à la programmation orientée objet. D'ou l'idée de remonter ces possibilités en C. Mais attention : tous les compilateurs ne supportent pas C99 (et notamment dans le monde du système embarqué).

Une nouvelle version du standard a été proposée en 2011 : C ISO 2011 (aussi appelée C11). Elle ajoute son lot de nouveautés et notamment une librairie de manipulation de threads.

La dernière version officielle de la norme C ISO est C ISO 2018 (aussi appelée C18). Elle est mineure et ne propose que des « bug fix ». Aucun ajout fonctionnel n'y est présent.

Pour savoir qu'elle est la version du C supporté par votre compilateur, il est possible d'afficher la valeur de la macro __STDC_VERSION__. En C89, cette macro n'est pas définie. En C99 elle doit renvoyer la valeur 199901L. En C11, elle renvoi la valeur 201112L et en C18, elle renvoi 201710L (c'est comme çà). Nous reviendrons sur le concept de macro dans un prochain chapitre.

Enfin, notez qu'une future version de la norme C ISO est en préparation. Elle est actuellement appelée C2x et vous retrouverez le contenu des discussions en cours à partir de ce site : http://www.open-std.org/jtc1/sc22/wg14/www/wg14_document_log.htm. Elle devrait constituer une évolution importante du langage C.

Les environnements de développement

Pour programmer en C, je vous conseille de vous équiper de deux types de logiciels. En premier lieu il va vous falloir obtenir un compilateur C : plusieurs solutions s'offrent à vous. En second lieu il va vous falloir utiliser un IDE (Integrated Development Environmnent) pour C : il en existe plusieurs, là aussi.

Pour ce qui est du compilateur C : il existe donc différentes solutions, certaines sont open source et gratuites, d'autres, propriétaires et payantes. Pour ma part je vous conseille d'utiliser l'outil gcc. C'est un projet GNU : il est donc en "open source" et gratuit. Qui plus est, si vous utilisez un système d'exploitation de type Unix ou Linux, la plupart du temps, il est distribué implicitement sur ces systèmes. Par contre, si vous utilisez une autre plate-forme type Windows (Société Microsoft), je vous conseille de télécharger l'application MinGW : il s'agit d'un portage de gcc pour la plate-forme considérée. Là, encore une fois, il s'agit d'un produit "open source".

Pour ce qui est d'un IDE C (un atelier de développement C, si vous préférez), il en existe plusieurs qui sont « open source » et gratuits. J'en citerais au moins trois : KDevelop (développé par l'équipe KDE), Net Beans (aujourd'hui porté par la fondation Apache) et enfin Eclipse (projet porté par la fondation Eclipse). Personnellement, ma préférence va à Eclipse qui est un produit remarquable sur de nombreux points. Notez aussi qu'il se couple parfaitement avec gcc ou MinGW.

Accueil C Compilation d'un programme C