Les Headers




Rappels importants du chapitre 3 :





La fonction printf est incluse à la fin grâce à la bibliothèque standard (libc.a), comment diable arrivons-vous à compiler un programme faisant appel à printf sans engendrer de warnings ? Vous n'avez pas une petite idée ? Son header comporte son prototype !

Vous comprenez maintenant pourquoi je disais qu'un header c'est le mode d'emploi de plusieurs fonctions , il permet en fait au compilateur de s'organiser.


C'est une convention, retenez bien ce qui suit, les prototypes des fonctions doivent toujours se trouver dans des headers !

Evidemment, si votre code source est tout petit, on peut faire des exceptions mais ce sera rare à partir de maintenant...


On a généralement un header pour un fichier *.C.


Rendre son code source modulaire ça veut dire le diviser (avec plusieurs *.C et *.H), le rendre le plus clair possible.

Nous allons rendre notre code source avec la fonction triple plus modulaire, pour créer un nouveau fichier, cliquez sur New file :



Commençons par ajouter un fichier *.C (source) qui contiendra seulement la fonction triple comme ci-dessous.

Notez que dans main.c j'ai l'habitude de garder que la fonction main.




N'oubliez pas de cocher un mode de compilation, si vous ne cochez rien, le fichier ne sera pas compilé...



Faites la même opération pour le header, comme ce sera le header de triple.c, appelons-le triple :




Une fois vos deux nouveaux fichiers créés, implémentez-les !

Le prototype dans le header triple.h et la fonction triple dans triple.c.


Vous obtenez ceci :



Si vous compilez, il y aura toujours le warning de la fonction déclarée implicitement, c'est pour ça que l'on a inventé les directives de préprocesseur, les includes ! Il faut donc inclure notre prototype devant l'appel à la fonction triple !

En effet, tous les fichiers *.C sont compilés un par un automatiquement mais pas les headers, il faut donc les inclure dans les fichiers *.C.


#include <stdio.h>
#include <stdlib.h>
#include "triple.h"

int main()
{
    printf("Le triple de 4 est %d.", triple(4));

    return 0;
}


Vous voyez, ici, j'ai utilisé des guillemets pour inclure triple.h, en effet, les chevrons s'utilisent pour inclure des headers du dossier include de MinGW, ici, notre header est dans le même dossier que main.c, donc il faut utiliser les guillemets.

En résumé :


    * Utilisez les guillemets pour inclure les headers du projet comme "triple.h".

    * Utilisez les chevrons pour inclure les headers du dossier include de MinGW comme <stdio.h>.


Je vous rappelle que chaque fichier *.C est compilé séparément.

Il faut donc inclure le prototype de triple dans chaque fichier *.C ayant un rapport avec la fonction triple, par exemple, dans triple.c, nous n'avons pas inclus triple.h, il faut justement l'inclure pour que le compilateur sache si on a bien implémenté la fonction.

Dans main.c, on inclue triple.h pour que le compilateur sache si on a bien appelé la fonction.


Incluez triple.h dans triple.c :


#include "triple.h"

int triple(int nb)
{
    return 3 * nb;
}


Votre code source est maintenant modulaire (certes, il est tout petit mais l'idée est là, retenez bien cette idée) :



Ce code source n'est pas parfait, il vous manque quelques directives de préprocesseur que nous verrons un peu plus loin, patience...

Créé avec HelpNDoc Personal Edition: Générer des livres électroniques EPub facilement