Compilateurs

Une question fréquente lorsqu'un langage de programmation est abordé, est de connaître l'équipement logiciel nécessaire, en particulier le compilateur. Nous allons ici aborder le fonctionnement général des compilateurs et, bien entendu, évoquer des compilateurs C/C++ pour les systèmes d'exploitation Linux et Windows. Fondamentalement, le rôle d'un compilateur est de transformer un code source écrit dans un langage de haut niveau (ici le langage C) en langage machine (code binaire) compréhensible par l'ordinateur.


Niveaux des langages

Nous parlons de langage de bas niveau lorsque celui-ci est composé de valeurs binaires (langage machine) ou en est proche. Au contraire, un langage de haut niveau est compréhensible pour nous et peut être travaillé. Dans le schéma ci-dessous, vous pouvez observer la "hiérarchie" des niveaux de langages.




Niveaux des langages


Processus de conversion en langage machine

Le processus de conversion du langage de haut niveau en langage machine est illustré plus bas. Le code C est d'abord compilé et converti en code machine, qui est enregistré dans un fichier objet qui porte l'extension .OBJ ou .o. Une étape intermédiaire consiste à convertir le code en assembleur. Cela n'est pas illustré dans le schéma, car les fichiers en assembleur n'apparaissent pas. Seul le fichier objet contenant le code en langage machine est visible. L'éditeur de lien entre ensuite en fonction. Son rôle est d'intégrer dans le code en langage machine les instructions se rapportant aux bibliothèques de fonctions. Ces bibliothèques de fonctions sont en réalité les fichiers .h (headers ou fichiers d'en-tête) que nous déclarons en début de programme. Une fois l'édition des liens terminée, nous obtenons un fichier exécutable. Il y a donc 3 fichiers importants que nous pouvons relever: le code source (fichier.c ou .cpp), le fichier objet (.obj ou .o) et le fichier exécutable (.exe ou .out).

Afin de se faire une idée concrète du contenu du fichier objet, analysons l'instruction suivante en assembleur. Celle-ci effectue l'addition de 2 et 3.

ADD 2, 3

En langage machine, cette instruction est représentée par les valeurs binaires suivantes.

0001101 0010 0011


Le préprocesseur

Les instructions destinées au préprocesseur commencent toujours par le symbole #. Ainsi, nous pouvons inclure le contenu d'un fichiers d'en-tête avec l'instruction #include<fichier.h>. C'est notamment à cette tâche qu'est astreint le préprocesseur: intégrer au fichier le contenu des fichiers .h. Il signal également les éventuelles erreurs présentes dans le code source.
Le schéma ci-dessous résume toutes ces notions.




Processus de compilation et d'édition de liens


Compilateurs et programmation sous Linux

Sous Linux, le meilleur moyen de programmer est d'utiliser le compilateur GCC fourni. Vous pouvez utiliser n'importe quel éditeur de texte pour éditer votre code.
Vous obtiendrez de l'aide sur GCC en tapant la commande:

man gcc


Pour compiler un programme et le rendre exécutable, tapez la commande:

gcc monprogramme.c


Cette commande va générer un fichier exécutable nommé a.out. Pour l'exécuter, tapez:

./a.out


Si vous désirez donner un nom plus explicite à l'exécutable, tapez le commande suivante:

gcc monprogramme.c -o monexecutable


Le fichier source monprogramme.c sera compilé et un exécutable sera généré sous le nom "monexecutable.out", que nous pouvez lancer comme suit:

./monexecutable


Notez que la programmation graphique sous Linux se fait à l'aide des outils Gnome/GTK. Notez également qu'un exécutable créé sous Linux ne pourra pas être exécuté sous Windows. A l'inverse, un fichier exécutable de Windows ne peut pas être exécuté directement sous Linux. Il existe des outils permettant de contourner ce problème (émulateurs). Nous n'entrerons pas ici dans les détails.


Compilateurs et programmation sous Windows

Il existe deux compilateurs très populaires dans Windows. Il s'agit de Borland C++ Builder et Microsoft C++. Nous avons retenu ici Borland C++. Son interface permet de créer votre code, et également d'en faire un programme graphique. L'image ci-dessous montre l'interface de Borland C++ Builder.




Compilateur Borland C++ Builder

Ce compilateur fournit les outils nécessaires pour créer des programmes graphiques. Nous en avons illustré un exemple ici. Dans cet exemple, nous avons ajouté un bouton. Cette action génère une fonction contenant le code que ce bouton doit exécuter. Il ne s'agit que d'un exemple simple. La totalité de l'utilisation de l'outil graphique est détaillée dans la documentation fournie avec ce compilateur.




Création d'une interface graphique avec le compilateur Borland C++ Builder