Au début de chaque programme, il y a des déclarations #include. Elles informent le compilateur de lire dans d'autres programmes en C. Ceci dit, le code ``brut'' ne présente pas de protection totale envers les erreurs: par exemple, la fonction strcpy pourrait tout aussi bien être utilisée avec un, deux, trois ou quatre arguments, ce qui n'empêcherait pas le programme d'être compilé. Cependant, l'exécution se passerait mal du côté de la mémoire s'il n'y avait pas deux arguments et, le programme planterait. Ces autres programmes C avec un suffixe.h sont des en-têtes ou headers. Ils contiennent des modèles (ou templates) sur base desquels les fonctions peuvent être appelées. Chaque fonction que vous utilisez est contenue dans un fichier ``modèle''. Ces modèles sont appelés des prototypes de fonctions (ou function prototypes). [Le C++ possède aussi des ``templates'', mais le terme utilisé en C++ désigne tout autre chose que ce dont nous discutons ici].
Le prototype d'une fonction est écrit comme la fonction elle-même,
le code en moins. Un prototype de la fonction word_dump
est:
void word_dump (char *filename);
|
Après qu'un prototype de fonction ait été défini, toute tentative d'utiliser cette fonction hors de son contexte d'exécution engendrera une erreur sans appel de la part de gcc. Travailler hors contexte d'exécution signifie passer trop ou trop peu d'arguments à cette fonction, ou des arguments non valides.
Vous noterez que #include <string.h> apparaît
lorsque nous envisageons d'utiliser des opérations sur les chaînes
(strings). La recompilation de ces
programmes sans la ligne #include <string.h>
engendrerait l'émission d'un avertissement:
mytest.c:21: warning: implicit
declaration of function 'strncpy'
|