Votre question

includes en C

Tags :
  • Creation
  • Programmation
Dernière réponse : dans Programmation
8 Mars 2008 11:08:00

Bonjour tout le monde, ma question va vous sembler peut être facile mais j'ai un problème sur la compilation d'un projet en C (pas C++).

J'ai crée plusieurs types avec des fonctions associées, j' appelle ça des paquetages (comme en ADA).

Alors avant ce que je faisait :
création d'un fichier type.h dans lequel :
- déclaration du type
- fonctions associées (exemple : afficher_type( type * var) );
Je n'avait même pas créer les prototypes (entêtes qui "déclarent" les fonctions). Ceci marchait très bien.

Puis un copain m'a dit : non, non, tu doit faire des prototypes et les séparer du code source en créant les fichiers :
- type.h : prototypes déclaration des fonctions
- type.c : code source des fonctions

je veux bien le faire surtout que tout le monde le fait apparemment et c'est obligatoire pour des projets complexes.


voici un exemple avec la création d'un type suite de caractères :

fichier : suite_car.h
  1. typedef struct t_Suite_car {
  2. char * Str;
  3. int Taille;
  4. }t_Suite_car;
  5.  
  6. /* affiche une string */
  7. int Afficher_string(t_Suite_car * Sc);


fichier : suite_car.c
  1. #include "suite_car.h"
  2.  
  3. /* affiche une string */
  4. int Afficher_string(t_Suite_car * Sc)
  5. {
  6. /* instructions, boucles . . . */
  7. }


Mais par la suite j'ai eu des problèmes d'inclusion.
dans le main j'utilise une file de caractère donc :

#include "file_gen.h"

mais dans mon paquetage dictionnaire j'ai un tableau de files donc dans dictionnaire.c :

#include "file_gen.h"

Avec ceci il y a trois points à voir :

1) est ce que l'include se fait bien le fichier.c ?
2) est ce que l'include concerne bien un fichier.h ?

3) Si le fichier a déjà été include dans le main, cela ne va t il pas créer des problèmes ?
Mes paquetages ( fichiers ) incluent des fichiers déjà incluent dans d'autres.
En fait peut etre que vous allez me dire de virer par exemple le inclure file.h d'un fichier car deja fait dans le main mais ca me semble pas logique car CE fichier a besoin de CETTE file.

Mes erreurs de compilation sont : undefined reference to ma_fonction
Mais en fait j'en plein d'autres que je veux pas détailler.

J'ai déjà cherché sur internet, mais j'ai pas trouver la solution miracle.

Merci pour votre aide

Autres pages sur : includes

8 Mars 2008 13:09:46

Problème résolu :
mes fichiers s'incluent entre eux avec :
  1. #include fichier.c


ce fichier.c inclut son prototype (définitions de ses fonctions)

  1. #include fichier.h



pour eviter la redondance d'appel :

en au de tous les fichiers :

  1. #ifndef FICHIER_EXT
  2. #define FICHIER_EXT
  3.  
  4. ...
  5.  
  6. en bas du fichier :
  7. #end if


en fait cela est inutile dnas les fichiers .h car si ils sont inclus que pas les .c or dans ceux la il y a deja le #ifndef
a b L Programmation
8 Mars 2008 14:28:37

Je déconseille fortement le #include d'un fichier .c.
de #ifndef ... #endif se met uniquement dans les fichiers .h (puisqu'on n'inclut pas de fichier .c).

Au final, tu devrais avoir ceci dans fichier suite_car.h
  1. #ifndef __SUITE_CAR_H__
  2. #define __SUITE_CAR_H__
  3.  
  4. typedef struct t_Suite_car {
  5. char * Str;
  6. int Taille;
  7. }t_Suite_car;
  8.  
  9. /* affiche une string */
  10. int Afficher_string(t_Suite_car * Sc);
  11.  
  12. #endif /* __SUITE_CAR_H__ */


Et dans le .c:
  1. #include "suite_car.h"
  2.  
  3. /* affiche une string */
  4. int Afficher_string(t_Suite_car * Sc)
  5. {
  6. /* instructions, boucles . . . */
  7. }


Je répète une dernière fois: les fichiers .c ne s'incluent pas entre eux. Il faut les compiler séparément et les lier (fait automatiquement avec la plupart des IDE).
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS