Notre page Facebook
Notre groupe Facebook


Android Game
Tap the Bug - Android Game

Le tutoriel sur le langage 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 ce 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 langage capable de permettre le développement d'un système d'exploitation Unix portable. Dennis M. Ritchie et Brian W. Kernighan définissent donc un premier C en se basant sur les langages BCPL et B. C était né. En 1978, les deux hommes publient "The C programming language" donnant ainsi une définition sommaire mais déjà importante du langage. Ce livre (dans sa seconde édition) fait aujourd'hui 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 livre précédemment cité, intégrant la norme, apparaîtra.

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, de plus normalisé, ISO (on parle alors de C90). En fait C89 (ANSI) et C90 (ISO) sont similaires. En 1999, le comité ISO publie une seconde version de son standard : on parle alors de C99 pour l'ISO et de C2k pour l'ANSI. Cette dernière évolution intègre beaucoup de points. En fait ces points étaient existant en C++, mais non directement rattaché à la programmation orientée objet. D'ou l'idée de redescendre ces possibilités en C. Mais attention : tous les compilateurs ne supportent pas C99.

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. Nous reviendrons sur le concept de macro dans le chapitre suivant.

Une nouvelle version du standard a été proposé en 2011 : C11. Elle ajoute son lot de nouveauté et notamment une librairie de manipulation de threads.

Les environnements de développement

Pour programmer en C, je vous conseil de vous équiper de deux types de logiciels. En premier lieu il va vous falloir obtenir un compilateur C ANSI : 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 en 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 conseil 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". Attention, par défaut C99 n'est pas activé dans MinGW. Par contre, arrivé à ce stade vous n'avez toujours pas d'éditeur évolué pour le code C.

Pour palier à ce problème, je vous conseil de vous équiper d'un IDE. Il en existe plusieurs, en projets "open source" gratuits. J'en citerais au moins trois : KDevelop (développé par l'équipe KDE), Net Beans (projet porté par Sun Microsystems) et enfin Eclipse (projet porté par IBM). 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.



Compilation d'un programme C ->