SilverSurfeur
Messages postés21Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention26 mars 2004
-
24 mars 2004 à 13:46
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
25 mars 2004 à 16:13
Voila mon problème :
j'ai un projet qui contient deux fichiers .c. Dans ces deux fichiers, j'effectue un #include "Display.h". Mon fichier Display.h est le suivant :
Or, lors de la compilation, il y a une erreur qui apparait disant que Add_LCD_Driver et SubAdd_LCD_Driver ont été exportés deux fois.
Je ne comprends pas pourquoi le fichier Display.h est inclu deux fois malgré le #ifndef. J'en ai conclu que le #define définissait un label seulement dans le fichier compilé et pas dans l'ensemble du projet.
Est ce que j'ai raison de penser ca ? Est ce que qqun connait une solution pour résoudre ce problème ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 24 mars 2004 à 22:35
en effet, les #define ne sont valable que pour le fichier .c ou .cpp compilé et pas pour l'ensemble du projet.
pour y remedier :
met tes directives #pragma et les variables et fonctions dans un fichier .c que tu ajoute au projet (ou dans un existant).
dans le .h, déclare ces même variables et fonctions en tant que extern sans les #pragma. comme cela dans les fichiers .c compilé avce #include "display.h", tu pourras y faire référence, le compilateur saura que le linker les trouveras ailleurs (mot cle extern)
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 25 mars 2004 à 16:13
en fait ça dépend du style de programmation que tu as. Si tu ne met aucun code dans les .h mais seulement des déclaration de fonction ou classes, tu n'as pas de problème de linkage. Par contre dè qu'il y a du code (c'est à dire le corps d'une fonction non inline ou des variables initialisées) il risque d'y avoir un pb si 2 fichiers sources incluent le header (tu te retrouve avec 2 fois la même fonction définie).
c'est pourquoi il faut éviter de mettre du code dans les .h