[C] Typedef et #include

Typedef et #include [C] - C - Programmation

Marsh Posté le 13-03-2011 à 12:42:01    

Bonjour à tous !
 
Je vous explique, j'ai 6 fichiers :
 
serveur.h => #include "shm.h"
              => #include "sem.h
serveur.c =>#include "serveur.h"
 
 
shm.h  =>#include "serveur.h"
shm.c =>#include "shm.h"
 
sem.h =>#include "serveur.h"
sem.c  =>#include "sem.h"
 
J'ai donc deux doubles-inclusions.
 
Dans mon serveur.h j'ai :  

Code :
  1. typedef char byte;
  2. typedef mem...


 
Je définis 2 types.
 
Lors de la compilation, j'ai :  
 

Code :
  1. gcc     -o shm.o -Wall -O3 -c  shm.c
  2. In file included from serveur.h:5,
  3.                  from shm.h:8,
  4.                  from shm.c:3:
  5. sem.h:22: error: expected ‘)’ before ‘*’ token


 
Ligne 22 :  

Code :
  1. int SEM_init(byte* shm);


 
Il ne trouve donc pas mon typedef qui est dans serveur.h
 
J'ai beau cherché, impossible à résoudre... Quel est mon probleme ?

Reply

Marsh Posté le 13-03-2011 à 12:42:01   

Reply

Marsh Posté le 13-03-2011 à 14:44:08    

Et si tu fais int SEM_init(byte *shm); ça donne quoi?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-03-2011 à 09:20:17    

Si tes doubles inclusions sont dues à tes deux "typedef", tu devrais peut-être déporter ces derniers dans un autre fichier header.
 
Le problème, à mon avis, est que tu mélanges plusieurs notions : la notion de "byte" est-elle propre à la notion de "serveur" ? Je ne pense pas, donc la définition du "byte" n'a rien à faire dans ce fichier. Idem pour "mem"...

Reply

Marsh Posté le 14-03-2011 à 10:37:17    

Les doubles triples ou autres inclusions, si c'est bien fait, ça pose pas de pb.
Je suppose qu'il utilise la technique standard style
#ifdef  __SHM_H__
#else
#define __SHM_H__
 /* le contenu de son shm.h */
#endif
parce que si c'est pas le cas, faut aimer vivre dangereusement.
Pour diagnostiquer son pb, faudrait voir un peu plus son code (au moins jusqu'a la ligne 22 quoi)
A+,


Message édité par gilou le 14-03-2011 à 10:39:02

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-03-2011 à 11:04:29    

Je suis d'accord sur le fait que les #ifdef .. #define .. #endif sont incontournables dans les headers, mais ca ne dispense pas de faire les choses dans les règles de l'art et de répartir le code proprement dans les fichiers. Ca ne peut que faire gagner du temps pour la compréhension ( et accessoirement pour la compilation ).
 
Sinon, +1 pour avoir un peu plus de code , parce que là, c'est un peu léger...

Reply

Marsh Posté le 16-03-2011 à 00:07:08    

Coucou et merci de vos réponses !
 
Mon problème s'est reglé en mettant mes typedef dans un fichier header !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed