Le programme disant "Bonjour !" (ou plutôt "Hello world !") est
le programme traditionnel débutant la présentation d'un
langage.
En voici donc une première version en C : bonjour.c
Pour pouvoir exécuter ce programme, il faut le compiler et le
lier avec la bibliothèque standard libc, en particulier pour
pouvoir utiliser la fonction printf
de la ligne 3.
Pour cela, on peut exécuter la commande :
$ gcc bonjour.c
$ a.out
Bonjour !
Pour donner un nom plus significatif à
l'exécutable, on utilise l'option -o
$ gcc bonjour.c -o bonjour
$ bonjour
Bonjour !
L'utilisation de l'option -Wall,
qui signale des écritures suceptibles d'entraîner des
erreurs (warning) nous montre que ce simple exemple n'est pas parfait :
$ gcc -Wall bonjour.c -o bonjour
bonjour.c: In function `main':
bonjour.c:3: warning: implicit declaration of function `printf'
bonjour.c:4: warning: control reaches end of non-void function
Le premier avertissement signale que la fonction printf , qui est définie
dans la libc, n'est pas
déclarée, alors qu'elle est utilisée à la
ligne 3. Elle est donc utilisée sans contrôle sur la
validité des types des paramètres et est censée
renvoyer un int.
L'ajout du fichier d'entête stdio.h
permet de régler ce problème. Ce fichier est
généralement situé dans le répertoire /usr/include.
On y trouve en particulier la déclaration de la fonction printf utilisée dans le
programme bonjour :
int
printf(const char *, ...);
La compilation avec le nouveau bonjour.c
montre que le premier problème a disparu.
$ gcc -Wall bonjour.c -o bonjour
bonjour.c: In function `main':
bonjour.c:6: warning: control
reaches end of non-void function
Le second avertissement signale que la fonction main est déclarée
comme renvoyant un int et
malgré cela se termine sans instruction return. Le simple rajout dans bonjour.c
de l'instruction
return EXIT_SUCCESS;
provoque une erreur, la constante EXIT_SUCCESS
n'étant pas définie.
$ gcc -Wall bonjour.c -o bonjour
bonjour.c: In function `main':
bonjour.c:6: error:
`EXIT_SUCCESS' undeclared (first use in this function)
bonjour.c:6: error: (Each
undeclared identifier is reported only once
bonjour.c:6: error: for each
function it appears in.)
Pour corriger cette erreur, il suffit d'inclure le fichier
d'entête stdlib.h.
On y trouve en particulier la définition de EXIT_SUCCESS :
#define
EXIT_SUCCESS 0
Maintenant, notre programme bonjour.c est parfait. On peut
également vérifier avec l'option de compilation -pedantic
qu'il est parfaitement conforme à la norme ISO.
$ gcc -Wall -pedantic bonjour.c
-o bonjour
$ bonjour
Bonjour !
L'outil make permet de faciliter la compilation et la gestion des
fichiers d'un programme. La directive de compilation devient alors
simplement make. Il est possible de la compléter avec d'autres
directives. Pour cela, il est nécessaire de créer
auparavant un fichier Makefile adapté.
$ make
gcc -g -Wall
-pedantic -c -o bonjour.o bonjour.c
gcc -g -Wall -pedantic
bonjour.o -o bonjour
$ make
make: `bonjour' is up to date.
$ make test
bonjour
Bonjour !
$ make clean
rm -f bonjour.o bonjour