Utilisation du compilateur

Le compilateur permet de traduire les instructions d'un langage évolué en instructions compréhensibles par l'ordinateur sur lequel il est exécuté.

  1. Le fichier source est créé ou modifié en utilisant un éditeur de texte (emacs dans notre configuration).
  2. Le fichier source est compilé.
  3. Un exécutable propre à un type d'ordinateur est créé.
  4. Cet exécutable peut être lancé sur la machine.
Le programme le plus simple que l'on peut écrire en C est le suivant : int main() { } Bien entendu comme il s'agit du programme le plus simple, il ne fait rien . Par contre il donne la structure d'un programme. Le C est basé uniquement sur la notion de fonction. Une fonction est un ensemble d'instructions qui retourne une valeur. Le programme principal (ou plus exactement la fonction principale) doit porter le nom main. Les fonctions se déclarent toujours de la même manière:

type de la valeur retournée par la fonction. Ici int indique que la valeur retournée sera de type entier. Cette valeur permet de retourner au système d'exploitation un compte rendu d'exécution. Conventionnellement une valeur nulle indique que le programme s'est correctement déroulé. Les autres valeurs peuvent soit indiquer une erreur (par exemple un fichier absent) ou un compte rendu (par exemple le programme a trouvé 12 valeurs). La signification de la valeur retournée doit être fournie avec les spécifications du programme.

nom de la fonction. Il s'agit d'un identificateur classique comme on le retrouve dans la plupart des langages. Une lettre majuscule ou minuscule suivie de lettres majuscules ou minuscules, de chiffres ou du caractère _. En C, les majuscules et les minuscules sont des caractères différents. Ainsi : Toto et toto sont deux identificateurs différents. Les bons programmeurs ont pris l'habitude de donner des noms significatifs. Par convention les différents mots qui composent le nom de la variable sont séparés par une lettre majuscule. Par exemple :
CeciEstUnLongNomDeVariable.

() : contient le type et le nom des variables passées à la fonction. Ces éléments sont séparés par une virgule. Dans l'exemple la liste est vide. On trouve plusieurs types de déclaration des variables :
main (int argc, char** argv)
correspond au C normalisé par l'ANSI.

{} : corps du programme, contient les instructions. Ici le corps du programme est vide. Le reste du cours consistera à le remplir


Un programme un peu plus compliqué est donné ci-dessous :

main() { printf ("Le petit chat est mort\n"); }

Ce programme affiche la chaîne de caractères "Le petit chat est mort". Dans ce programme deux exceptions par rapport aux règles de programmation stricte du C. Le type de la fonction main n'a pas été défini. Quand un type n'est pas défini le compilateur C suppose qu'il s'agit d'une variable entière. Mais surtout la fonction printf n'a pas été définie.
Les compilateurs actuels sont assez tolérants pour la fonction printf. Une bonne programmation aurait nécessité la déclaration de la fonction. Pour ce faire, on peut utiliser des fichiers qui contiennent les déclarations. Ces fichiers se trouvent à plusieurs endroits de la machine. Le compilateur C sait les retrouver. Le fichier qui déclare les entrées/sorties et donc en particulier la fonction printf s'appelle stdio.h. stdio pour standard Input/Output et le .h pour indiquer qu'il s'agit d'un fichier contenant des déclarations que l'on met au début du programme dans l'entête (header en anglais).

Quand vous ferez de la programmation système vous userez et abuserez des fichiers d'include. Comme le programme est censé retourner une valeur, il se termine par la ligne return 0 qui indique que le programme s'est déroulé correctement.

Le programme correct aura l'aspect suivant :

#include <stdio.h> int main() { printf ("Le petit chat est mort\n"); return 0; }

Le programme doit être stocké dans un fichier portant l'extension .c (par exemple premier.c). La compilation se fait par la commande
cc premier.c -o premier
ou
gcc premier.c -o premier

Le premier compilateur cc correspond au compilateur de la machine. Le deuxième compilateur est un compilateur que l'on trouve sur beaucoup de systèmes. gcc respecte la norme ANSI. Il doit être utilisé de préférence.
L'argument -o précise le nom sous lequel l'executable doit être stocké. Si aucun nom n'est précisé, l'exécutable est appelé a.out.




exercices



Q.C.M.


Vrai Faux
1. L'option -o permet de stocker l'exécutable sous un autre nom que a.out
2. Printer est un nom de variable correct
3. premier-essai est un nom de variable correct
4. deuxieme_essai est un nom de variable correct
5. troisieme essai est un nom de variable correct
6. 4_essai est un nom de variable correct
7. essai_5 est un nom de variable correct
8. Un programme compilé pour une machine HP peut tourner sur un Sun
9. Lors de l'exécution le fichier source doit être présent
10. -E permet de voir le fichier source une fois que les fichiers d'inclusion ont étés insérés.
11. -S permet d'obtenir l'assembleur résultant de la compilation.



Suite : Les Concepts fondamentaux


Menu Principal