4Fermer6
ThibautLe 29/01/2008 à 19:03
Alors, un .H contient normalement des déclarations formelles. Les déclarations effectives sont faites dans les .C.

C'est quoi la différence entre déclaration formelle et déclaration effective ? Je pense que tu es comme Mr Jourdain, tu as déjà utilisé ces concepts sans le savoir. Quand tu crées une fonction, tu fais deux choses : le prototype, et l'implémentation.

(...) }
Exemple : void fonction1(int blabla);    // <-- déclaration formelle

char variable;

int main()
{
  (...)
  fonction1();
  (...)
}

void fonction1(int blabla)    // <-- déclaration effective
{
La première ligne dit "il y a une fonction "fonction1" qui existe dans mon programme" mais c'est tout. Ensuite, plus bas, on donne le code de cette fonction, ce qu'elle doit exécuter, entre accolades.

Concrètement, dans le .H, il faut que tu rajoutes extern devant chaque déclaration de variable (pointeurs, scalaires, tableaux, structures, unions, enumérations, ...). Cela dit au compilateur "cette variable existe", sans réserver sa place en mémoire.

Cette réservation doit être faite dans le .C. En faisant une déclaration classique. Voici un programme organisé selon le modèle que je t'ai expliqué :


FICHIER .H :
extern void fonction1(int blabla);    // pour les fonctions t'es pas obligé de mettre "extern"

extern char variable;
FICHIER .C :
#include "fichier.h"

char variable;

int main()
{
  (...)
  fonction1();
  (...)
}

void fonction1(int blabla)
{
  (...)
}