
Le langage C 
Première partie 
 
Par : 
Guilhem de Wailly (gdw@erian-concept.com) 
 
Résumé 
Dans  cette  série  d'articles,  nous  présentons  le  langage  C.  Il  ne 
s'agit pas de réécrire les ouvrages de référence donnés en annexe, 
mais de donner, au travers du C, une méthode de programmation 
basée sur la notion d'interface. 
Au  fur  et  à  mesure  de  notre  progression,  nous  décrirons  les 
éléments  indispensables  du  langage  et  conduirons  le  lecteur  à 
consulter  les  ouvrages  de  références.  Le  but  poursuivit  est 
clairement de parvenir a construire des programmes de manière 
segmentée. 
Dans cet première partie, nous n'échapperons pas au traditionnel 
"hello word" ! Nous décrions aussi la manière d'utiliser les outils 
propres au C, comme le compilateur et le lieur. 
Cette présentation est basée sur les outils GNU comme gcc, ld et 
ar  et  le  débogueur  gdb. Elle  peut  être  transposée  dans d'autres 
environnements  comme  les  plateformes  Microsoft,  bien  que  les 
outils y soit souvent complètement intégrés, confisquant du même 
coup la souplesse, la puissance et la liberté à l'utilisateur. 
Introduction 
Ce langage fut créé en 1972 dans les laboratoires Bell AT&R par 
Dennis  Ritchie.  C'est  un  langage  algorithmique  et  impératif 
appartenant à la même famille que Pascal, PL/1. 
C'est  un  langage  primitif,  à  la  frontière  de  l'assembleur  et  des 
langages  évolués.  Il  est  facile  à  compiler,  facile  à  porter  vers 
d'autres machines. En effet, il a été conçut de manière à ce que le 
compilateur soit simple et rapide. 
Dans les premiers temps, Unix était écrit en assembleur (langage 
machine)  et  en  B,  un  ancêtre  du  C,  non  typé.  Le  portage  vers 
d'autres ordinateurs posait des  problèmes. L'idée fut de  réécrire 
le plus  de code  possible de  Unix  en C.  Seules  certaines parties 
demeurent écrites en assembleur. Unix étant très utilisés dans les 
Universités, le langage C devint vite populaire et très utilisé. On 
le  trouve  sur  quasiment  toutes  les  architectures,  du  processeur 
spécialisé pour le traitement du signal (DSP), en passant par les 
micro-ordinateurs, jusqu'aux super calculateurs. 
Un  programme  C  est  portable  d'une  architecture  à  l'autre. 
Cependant, le portage peut poser des problèmes, notamment  en 
ce qui concerne la taille des mots. Ainsi, sur un 8086, un entier 
est codé sur 16 bits, alors que sur un 386, il est codé sur 32 bits. 
Le C est utilisé pour programmer des applications aussi diverse 
que  les  systèmes  d'exploitation,  les  gestionnaires  de  base  de 
données, les interfaces graphiques. 
Le  langage  C  est  normalisé  par  l'American  National  Standard 
Institut  (ANSI)  depuis  1982.  Avant  cette  normalisation,  le 
langage C était `` normalisé '' par une annexe du livre de Brian 
Kernignan et Dennis Ritchie, connue sous le nom de K&R. 
Le  langage  C  a  continué  d'évoluer  en  se  dotant  d'un  moteur  à 
Objet  pour donner  naissance au  langage  C++,  conçu par  Bjarn 
Stroustrup. Le langage C++ offre de réelles innovations, mais les 
compilateur C++ restent lents, et les puristes préfèrent continuer 
à développer en C. 
Au  cours de  ces  articles,  nous montrerons  comme  programmer 
en C en utilisant une `` approche orientée objets ''. 
Hello Word! 
Nous  supposons  que  nous  travaillons  sur  une  station  Unix,  de 
préférence Linux.  Le compilateur C a  été correctement installé, 
ainsi que les bibliothèques de développement. 
Nous recommandons de travailler avec l'éditeur de texte emacs 
ou jed, qui possèdent tous les deux un mode C qui reconnaît la 
syntaxe  C.  Emacs  va  plus  loin  puisqu'il  permet  de  compiler 
automatique  les  programmes,  de  les  déboguer  :  il  propose  un 
véritable environnement de programmation C. 
Plaçons-nous  dans  un  répertoire  de  travail.  Tapons  le  fichier 
suivant, nommé hello.c : 
#include <stdio.h> 
 
void main (void) { 
 printf ("hello word !\n"); 
} 
Emacs  permet  d'indenter  correctement  les  programmes.  Pour 
cela,  taper  la touche  TAB  au  début sur  une  ligne  (ou  au début 
d'une ligne). Au lieu de placer une tabulation, emacs indente la 
ligne  (indenter  signifie  placer  des  blancs  au  début  des  lignes 
pour  montrer  la  hiérarchie  des  blocs  du  programme).  Seule  la 
première  pression  sur TAB à un  effet,  les  autres sont ignorées. 
Donc,  lorsque  l'on  tape  ENTER  pour  retourner  au  début  de  la 
ligne, on tape aussi TAB pour indenter la ligne. 
La mise en forme de emacs est conforme à l'usage. Cela ne veut 
pas dire que le programme ne sera pas reconnu si l'on opte pour 
une autre mise en forme. En  fait, seules les lignes commençant 
par # doivent être suivies d'un saut à la ligne. Les autres peuvent 
être écrites comme l'on souhaite, comme : 
#include <stdio.h> 
void main(void){printf("hello word !\n");} 
Le programme est constitué de mots séparés par des séparateurs. 
Le séparateur le plus important est le blanc. En C, un blanc est 
un  espace,  une  tabulation,  un  saut  à  la  ligne,  ou  toute  autre 
combinaison de blancs. Les autres séparateurs sont < > ( ) " { 
} [ ] ; , et les opérateurs arithmétiques. Le lecteur se référera 
aux ouvrages cités en annexe pour lire la grammaire complète du 
langage C. 
On  reconnaît  donc  les  mots  #include,  stdio.h,  void, 
main et  printf. Comme dans la plupart des autres langages, 
les chaînes de caractères constantes sont entourées de guillemets. 
Attention,  le  C  fait  la  différence  entre  les  minuscules  et  les 
majuscules. 
La  première  ligne  indique  au  compilateur  d'utiliser  la 
bibliothèque  des  entrées  /  sorties  standard.  Nous  verrons  plus 
tard ce que cela implique exactement. 
La  ligne  suivante  définit  une  fonction  appelée  main.  Cette 
fonction  ne  retourne  rien  (premier  void)  et  n'a  pas  de 
paramètres (void  entre parenthèses). La fonction  main est  un 
peut particulière : dans tout programme C, quelque soit sa taille, 
il  n'y  a  qu'une  seule  fonction  appelée  main,  et  c'est  le  point 
d'entrée du programme.   
Ce  qui  est  placé  entre  les  accolades  constitue  le  corps  de  la 
fonction  :  ce  sont  des  instructions  séparées  par  des  points 
virgules. Ce corps ne comporte qu'une seule instruction. C'est un 
appel à la fonction printf, avec comme argument, la chaîne de 
caractères constante Hello word !\n La fonction printf st