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 exécute 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'inclusion 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 -std=c99
qu'il est totalement conforme à la norme C99.
$ gcc -Wall -std=c99
bonjour.c -o bonjour
$ bonjour
Bonjour !