2Compl´ements Algo-Prog – Gea 2–
l’action Load porte le code 01. Naturellement, les microprocesseurs actuels ont un jeu d’instructions plus large et
des donn´ees plus grandes. En conclusion, un programme ´ecrit en langage machine est clairement illisible.
Une autre fa¸con d’´ecrire un programme, plutˆot que sous forme de nombres, constitue le langage assembleur2.
L’instruction pr´ec´edente serait ´ecrite Load A,12, ce qui est d´ej`a plus ´evocateur que 76. N´eanmoins, de nos jours, le
langage assembleur est assez peu utilis´e3. Il a laiss´e sa place `a essentiellement deux types de langages : les langages
compil´es et les langages interpr´et´es. Dans le premier cas (C, C++, Fortran, Pascal, Cobol, Ada, ...), le programmeur
´ecrit le code source de son programme dans un langage ´evolu´e, par exemple le C, qui n’est pas compr´ehensible par
la machine. Puis, un logiciel nomm´e compilateur aura pour tˆache de transformer ce code source en langage machine.
Cette op´eration est appel´ee la compilation. Une fois transform´e en langage machine, le programme est ex´ecutable
par la machine, mais n’est plus compr´ehensible par un humain. Une autre particularit´e des langages compil´es est
que les programmes ex´ecutables sont d´ependants de la plate-forme. Un programme en langage machine est en effet
d´ependant du type de microprocesseur (du type de mat´eriel en g´en´eral), et du syst`eme d’exploitation (`a cause des
appels-syst`emes). Par cons´equent, un programme compil´e sur un PC Intel avec Linux ne fonctionnera pas sur le
mˆeme PC Intel avec Windows, ni sur une machine `a base de 68000 avec Linux...
Un langage interpr´et´e (Basic, Logo, Lisp, Prolog...) s’utilise `a l’aide d’un interpr´eteur. Un interpr´eteur est un
programme qui va lire le code source, et ex´ecuter une `a une, chacune des op´erations qu’il contient. Un programme
´ecrit dans un langage interpr´et´e est souvent plus lent, en moyenne, qu’un programme compil´e, pour la bonne raison
que l’interpr´eteur doit, `a la vol´ee, comprendre et traduire le texte du programme pour demander `a la machine de
l’ex´ecuter.
3 Compilation d’un programme en C
Nous entendons ici par compilation les deux ´etapes suivantes :
– la compilation proprement dite ;
– puis d’´edition de liens.
La premi`ere ´etape transforme un fichier source C en fichier objet, (`a peu de choses pr`es des bouts de programme
´ecrits en langage machine). L’´etape d’´edition de liens regroupe des fichiers objets entre eux de fa¸con `a obtenir un
programme complet, ´ecrit en langage machine, qui peut ˆetre ex´ecut´e.
La distinction entre les deux ´etapes est souvent n´ecessaire `a la compr´ehension des erreurs. Une erreur de compilation
signifie g´en´eralement que le compilateur n’a pas compris ce qui est inscrit dans le code source. Une erreur d’´edition
de liens signifie souvent qu’il manque quelque chose aux fichiers objets pour cr´eer un programme complet.
La plupart des environnements de d´eveloppement int´egr´es (IDE) maintiennent cette diff´erence et la cr´eation d’un
programme s’effectue en deux ´etapes : Compile, puis Link. Avec un compilateur en ligne de commandes comme
gcc, ces deux ´etapes sont distinctes aussi :
–gcc -c fic1.c Compilation de fic1.c, cr´eation de fic1.o
–gcc -c fic2.c Compilation de fic2.c, cr´eation de fic2.o
–gcc -o programme fic1.o fic2.o ´
Edition de lien, les fichiers fic1.o et fic2.o sont regroup´es pour
former le programme nomm´e programme
Ces deux ´etapes peuvent ˆetre regroup´ees en une ligne :
–gcc -o programme fic1.c fic2.c mais il n’en reste pas moins vrai que les deux ´etapes sont effectu´ees
successivement.
L’int´erˆet de ce type de compilation (dite compilation s´epar´ee) est de minimiser les temps de compilation. Lorsqu’un
fichier est modifi´e, seul celui-ci doit ˆetre recompil´e, et l’´edition de liens doit ´egalement ˆetre refaite.
Lorsqu’une application est compos´ee de plusieurs centaines de fichiers, alors qu’une compilation compl`ete peut
durer plus d’une heure, une recompilation due `a une modification mineure ne prendra que deux ou trois minutes.
Techniquement parlant, il est `a noter qu’un fichier d’en-tˆete .h inclus dans un fichier .c fait partie int´egrante de
ce dernier. Donc la modification d’un .h implique la recompilation de tous les .c l’incluant (ainsi que l’´edition de
liens). Et de mˆeme si l’on modifie un .h inclus dans un autre .h lui-mˆeme inclus dans un .c...
Les IDE se chargent de g´erer et d’optimiser les compilations. En ligne de commandes, un outil sp´ecial est charg´e
de ce travail : la commande make et le fichier Makefile.
2Ce terme est utilis´e par abus. L’assembleur est le logiciel qui transforme un programme ´ecrit sous forme de mn´emoniques en langage
machine. Par extension, on appelle aussi assembleur le langage constitu´e par ces mn´emoniques.
3En ce qui concerne l’informatique domestique. En informatique industrielle ou embarqu´ee, il n’est pas rare d’utiliser l’assembleur.