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 !