I. Introduction▲
I-A. Historique▲
L'histoire du langage C est intimement liée à celle du système d'exploitation UNIX.
En 1969, Ken Thompson, qui travaillait pour Bell Laboratories, mit au point sur un DEC PDP-7
un système d'exploitation semblable à Multics mais plus simple et plus modeste. Ce système reçut
par la suite le nom d'Unics (Uniplexed Information and Computing System) qui ne tarda pas à être
définitivement changé en UNIX.
A l'époque, le seul langage vraiment adapté à l'écritute de systèmes d'exploitation était le
langage d'assemblage. Ken Thompson développa alors un langage de plus haut niveau (c'est-à-dire plus proche du langage humain), le
langage B (dont le nom provient de BCPL, un sous-ensemble du langage CPL, lui-même
dérivé de l'Algol, un langage qui fut populaire à l'époque), pour faciliter l'écriture d'UNIX.
C'était un langage faiblement typé (un langage non typé, par
opposition à un langage typé, est un langage qui manipule les objets sous leur forme binaire,
sans notion de type (caractère, entier, réel, ...)) et trop dépendant du PDP-7 pour permettre de porter UNIX sur d'autres machines.
Alors Denis Ritchie et Brian Kernighan, de Bell Laboratories également,
améliorèrent le langage B pour donner naissance au langage C. En 1973, UNIX fut réécrit
entièrement en langage C. Pendant 5 ans, le langage C fut limité à l'usage interne de Bell
jusqu'au jour ou Brian Kernighan et Denis Ritchie publièrent une première définition du
langage dans un ouvrage intitulé The C Programming Language. Ce fut le début d'une
révolution dans le monde de l'informatique.
Grâce à sa puissance, le langage C devint rapidement très populaire et en 1983, l'ANSI
(American National Standards Institute) décida de le normaliser en ajoutant également
quelques modifications et améliorations, ce qui donna naissance en 1989 au langage tel que
nous le connaissons aujourd'hui. L'année suivante, le langage C a été adopté par l'ISO
(International Organization for Standardization) et actuellement, par l'ISO et l'IEC (International Electrotechnical Commission),
et a connu au fil du temps certaines révisions (dans l'immense majorité des cas toujours compatibles avec les versions antérieures)
dont les plus importantes sont celles de 1990 (adoption par l'ISO), de 1995
(amélioration du support du développement de programmes internationnaux) et de 1999 (ajout d'un nombre important de nouvelles fonctionnalités).
La version de 1999 est cependant actuellement encore peu diffusée c'est pourquoi dans ce document,
nous nous placerons dans l'apprentissage des versions de 1990 et 1995.
I-B. Caractéristiques du langage C▲
I-B-1. Universalité▲
Langage de programmation par excellence, le C n'est pas confiné à un domaine particulier d'applications. En effet, le C est utilisé dans l'écriture
- de systèmes d'exploitations (comme Windows, UNIX et Linux) ou de machines virtuelles (JVMs, Runtimes et Frameworks .NET, logiciels de virtualisation, etc.)
- de logiciels de calcul scientifique, de modélisation mathématique ou de CFAO (Matlab, R, Labview, Scilab, etc.)
- de bases de données (MySQL, Oracle, etc.)
- d'applications en réseau (applications intranet, internet, etc.)
- de jeux vidéo (notamment avec OpenGL ou la SDL et/ou les différents moteurs (de jeu, physique ou 3D) associés))
- d'assembleurs, compilateurs, débogueurs, interpréteurs, de logiciels utilitaires et dans bien d'autres domaines encore.
Oui, le C permet tout simplement de tout faire, ce qui lui a valu, à juste titre, l'appelation courante "the God's programming language" (le langage de programmation de Dieu). A cause de son caractère proche du langage de la machine, le C est cependant peu productif, ce qui signifie qu'il faut souvent écrire beaucoup pour faire peu. C'est donc le prix à payer pour l'utilisation de ce langage surpuissant !
I-B-2. Concision, souplesse▲
C'est un langage concis, très expressif, et les programmes écrits dans ce langage sont très compacts grâce à un jeu d'opérateurs puissant.
I-B-3. Puissance▲
Le C est un langage de haut niveau mais qui permet d'effectuer facilement des opérations de bas niveau et d'accéder aux fonctionnalités du système, ce qui est la plupart du temps impossible ou difficile à réaliser dans les autres langages de haut niveau. C'est d'ailleurs ce qui fait l'originalité du C, et aussi la raison pour laquelle il est autant utilisé dans les domaines où la performance est cruciale comme la programmation système, le calcul numérique ou encore l'informatique embarquée.
I-B-4. Portabilité▲
C'est un langage qui ne dépend d'aucune plateforme matérielle ou logicielle, c'est-à-dire qui est entièrement portable. De plus, de par sa simplicité, écrire un compilateur C pour un processeur donné n'est pas beaucoup plus compliqué que d'écrire un assembleur pour ce même processeur. Ainsi, là où l'on dispose d'un assembleur pour programmer, on dispose aussi généralement d'un compilateur C, d'où l'on dit également que le C est un "assembleur portable".
I-B-5. Omniprésence▲
La popularité du langage mais surtout l'élégance des programmes écrits en C est telle que son style et sa syntaxe ont influencé de nombreux langages :
- C++ et Objective C sont directement descendus du C (on les considère souvent comme des extensions du C)
- C++ a influencé Java
- Java a influencé JavaScript
- PHP est un mélange de C et de langage de shell-scripting sous Linux
- C# est principalement un mix de C++ et de Java, deux langages de style C, avec quelques influences fonctionnelles d'autres langages comme Delphi et Visual Basic (le # de C# vient-il dit-on de deux "++" superposés)
- Et on risque d'y passer la journée ...
Connaître le C est donc très clairement un atout majeur pour quiconque désire apprendre un de ces langages.
I-C. A propos de ce document▲
Ce document contient des cours et des exercices. Chaque fois que vous tombez sur des exercices, traitez-les avant de passer au chapitre ou au paragraphe suivant.