C: probleme de compil sur un typede => ferror: syntax error before ''

C: probleme de compil sur un typede => ferror: syntax error before '' - C - Programmation

Marsh Posté le 16-12-2014 à 23:32:08    

Bonjour
j'ai une erreur de compilation que je n'arrive pas à résoudre avec l'utilisation d'un typedef
l'erreur est la suivante : main.h:6: error: syntax error before 'titi'
 
 
voilà les 4 fichiers que j'utilise :
 
le main.c

Code :
  1. #include "main.h"
  2. int main (void)
  3. {
  4.     toto tata = 0;
  5.     func (tata);
  6.     return 0;
  7. }
  8. int func(toto titi)
  9. {
  10.     return 0; 
  11. }


 
avec son .h

Code :
  1. #ifndef _MAIN_H_
  2. #define _MAIN_H_
  3. #include "lib.h"
  4. int func(toto titi);
  5. #endif


 
puis une librairie "lib.c" dans laquelle je créer le typedef

Code :
  1. #include "lib.h"
  2. blablabla .....


 
avec son .h

Code :
  1. #ifndef _LIB_H_
  2. #define _LIB_H_
  3. #include "main.h"
  4. typedef unsigned int toto;
  5. #endif


 
je pense qu'il y a un problème avec les 2 .h qui s'appellent, mais je ne sais pas comment le résoudre
 
Merci d'avance

Reply

Marsh Posté le 16-12-2014 à 23:32:08   

Reply

Marsh Posté le 17-12-2014 à 08:21:11    

Bonjour,
 
Cette erreur viens du faite que Toto n'est pas reconnu en tant que type dans ton main.
 
Tu doit appeler le .h ou se trouve  
 

Code :
  1. typedef unsigned int toto;


 
dans ton main et pas l'inverse.


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 17-12-2014 à 10:46:01    

Il y a un autre type de problème dans ton "architecture" : c'est include croisé :
- le main.h include le lib.h
- le lib.h include le main.h
 
C'est un vrai souci sur le long terme. La protection avec le #ifndef #define #endif est là pour gérer le problème d'ordre d'import et non de gérer des includes croisés.
 
Le main.h doit includer tous les .h mais les libXXX.h ne le doivent pas car c'est bien l'application qui est un assemblage de module mais les modules ne doivent pas "résupposer" le fonctionnement applicatif global
 
Donc ton lib.h NE DOIT PAS faire d'include de main.h
 

Reply

Marsh Posté le 17-12-2014 à 14:22:20    

Vu qu'on n'est plus à l'age de pierre, plutôt que les
#ifndef XXX
#define XXX
...
#endif
les compilos modernes supportent la directive
#pragma once
http://en.wikipedia.org/wiki/Pragma_once
 
A+,


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

Sujets relatifs:

Leave a Replay

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