Le langage C - compilation et exécution

Un programme en langage C n'est pas directement compréhensible pour la machine sur laquelle vous travaillez. Il faut lui faire subir une transformation pour en faire un fichier exécutable. C'est la compilation.

Étapes de compilation

La compilation se passe en trois étapes. La première transforme le fichier source (d'extension .c) en prenant en compte toutes les instructions qui commencent par #. Par exemple l'instruction #include <stdio.h> est remplacée par le contenu du fichier stdio.h de sorte que lors de la phase suivante (la compilation proprement dite) les déclarations des fonctions d'entrée-sortie soient prises en compte. La seconde étape est la compilation du fichier source, c'est à dire la traduction du langage C en langage que la machine comprend. Enfin la dernière étape est le lien, qui consiste à ajouter au programme compilé les fonctions déjà compilées que notre programme utilise (comme celles déclarées dans les fichiers .h).

Le compilateur

Dans la configuration que nous utilisons, l'utilisateur ne fait appel qu'à un seul programme qui effectuera successivement toutes ces opérations. Il s'agit du compilateur gcc (pour GNU C Compiler). C'est un logiciel libre et distribué gratuitement de grande qualité. Il existe sur toutes les machines UNIX (GNU/Linux et Apple entre autres basent leurs systèmes dessus et sont donc distribués avec gcc), mais existe aussi pour Microsoft-Windows.

La commande de compilation est

ordi:~$ gcc -Wall pendule_euler.c -o pendule_euler

Par défaut le programme exécutable généré a pour nom a.out, mais il est conseillé de lui donner un autre nom avec l'option -o: dans l'exemple donné le programme s'appellera pendule_euler. L'option -Wall sert à générer le maximum d'avertissements lors de la compilation. Nous conseillons vivement de toujours la mettre !

Exécution

Si la compilation s'est terminée sans erreur, on peut exécuter le programme en tapant son nom précédé de ./, dans notre exemple:

ordi:~$ ./pendule_euler

/!\ Attention /!\

Le fichier exécutable (exemple: pendule_euler) n'est créé (ou modifié) que si la compilation s'est déroulée sans erreur.

Pour que la compilation se déroule correctement, il faut que le fichier source (ici pendule_euler.c) soit écrit sans erreur de syntaxe. Si tel n'est pas le cas, le compilateur ne comprend pas et vous indique les erreurs de syntaxe, et les numéros des lignes où il a rencontré une erreur.

Messages d'erreur

Il est essentiel de lire les messages d'erreur si l'on veut pouvoir les corriger !! Ceux-ci sont écrit en anglais mais il n'est pas nécessaire d'avoir un niveau exceptionnel pour les comprendre. Vous pouvez consulter une liste (non exhaustive) de messages d'erreur.

On rencontre deux types de messages, les erreurs (error) et les avertissements (warnings). Les erreurs sont "fatales" : le compilateur ne comprend pas et ne peut donc générer de fichier exécutable. Les 'warnings' n'empêchent pas la compilation mais sont susceptibles de provoquer une erreur ou un dysfonctionnement lors de l'exécution. Il est souvent utile d'essayer d'analyser la cause de ces 'warnings'.

Liens, bibliothèques de fonctions

La plupart des fonctions standard du C sont ajoutées au programme exécutable dans la phase de lien. Cependant, certaines fonctions nécessitent un ajout "manuel" lors de la commande de compilation. C'est le cas, par exemple, pour les fonctions mathématiques. Si le programme utilise des fonctions mathématiques, la commande de compilation sera:

ordi:~ $ gcc -Wall simul2.c -lm -o simul2

qui permet au compilateur, lors de la phase de lien, d'aller chercher dans la bibliothèque de fonctions mathématiques celles utilisées dans le programme simul2.c, et de l'ajouter au programme exécutable. Une bibliothèque de fonctions (library) est en fait un ensemble de fonctions, regroupées en général par thème (comme des fonctions mathématiques) et déjà compilées.

D'une façon générale, on peut "lier" au programme n'importe quelle bibliothèque de fonctions en utilisant lors de la commande de compilation l'option -l (pour library) suivie du nom de la bibliothèque (sans espace): -lnom_de_la_bibliotheque. dans notre cas, la bibliothèque de fonctions mathématiques s'appelle m (pour math...). On peut ajouter plusieurs bibliothèques en ajoutant autant de fois l'option -l... à la suite.

Utilisation de plusieurs fichiers source

Il est également possible de compiler ensemble plusieurs fichiers sources (d'extension .c), à partir du moment où un seul de ces fichiers contient une fonction main() (qui est le point d'entrée du programme résultant). Cela peut se faire de plusieurs façons:

Exemple

Affichez, compilez et exécutez le programme prog1.c, qui affiche un message à l'écran (sortie standard) si tout a bien marché.
Auteur(s) : Anciens, A. Daerr. Dernière modification : Tue Nov 21 01:57:55 2006. [validate XHTML]