Problème avec les #define en C sous CodeWarrior

SilverSurfeur Messages postés 21 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 26 mars 2004 - 24 mars 2004 à 13:46
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Derniè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 :

#ifndef __DISPLAY_H_

#define __DISPLAY_H_
#define SDATA	2
#define SCLK	3

typedef unsigned short word;
typedef unsigned char byte;

#pragma DATA_SEG DATA_DISPLAY
const byte Add_LCD_Driver = 0x7C;
const byte SubAdd_LCD_Driver = 0x0E;
byte PxDR_I2C_PORT;
byte PxDDR_I2C_PORT;
byte PxOR_I2C_PORT;

#pragma CODE_SEG DEFAULT
void ECTrame_I2C_Driver(byte ByteCount,byte* MTAMPON);

#endif


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 ?

Merci d'avance pour vos réponses...

Simon

3 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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)
0
SilverSurfeur Messages postés 21 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 26 mars 2004
25 mars 2004 à 08:42
Je trouve ca quand meme bizarre. Je n'avais pas vu ce problème avant. Et pourtant ca fait 3 ans que je fais du C ou du C++...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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
0
Rejoignez-nous