begin process at 2012 05 30 02:01:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Problème avec les #define en C sous CodeWarrior


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec les #define en C sous CodeWarrior

mercredi 24 mars 2004 à 13:46:22 | Problème avec les #define en C sous CodeWarrior

SilverSurfeur

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
mercredi 24 mars 2004 à 22:35:29 | Re : Problème avec les #define en C sous CodeWarrior

ymca2003

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)
jeudi 25 mars 2004 à 08:42:52 | Re : Problème avec les #define en C sous CodeWarrior

SilverSurfeur

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++...
jeudi 25 mars 2004 à 16:13:21 | Re : Problème avec les #define en C sous CodeWarrior

ymca2003

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


Cette discussion est classée dans : problème, byte, driver, display, define


Répondre à ce message

Sujets en rapport avec ce message

WinGDI.h [ par Lutinore ] Salut,Les valeurs suivantes sont déclarées dans WinGDI.h mais je ne trouve aucune documentation dans la MSDN./* Child device state */#define DISPLAY_D !!! Problème avec Windows 98 !!! [ par yoyo269 ] Bonjour à toutes et à tous,j'ai un problème de compatiblité avec Windows 98 avec le programme suivant :http://siteayoyo.free.fr/Divers/YoyoCut.exePour VS2005 et Variables Globales [ par letscode ] Bonjour,Bon j'avance bien :)J'ai un problème irrésolvable.J'utilise Visual Studio 2005, et j'ai plusieurs fichiers qui incluent un fichiers "communs.h Problème avec SendInput pour la souris [ par VBGenesis ] BonjourJe possède une vieille tablette graphique dont les drivers ne sont plus maintenus (ils ne fonctionnent qu'avec 98...), donc j'essaye de les ref Problème de conversion byte[] en int [ par Quemar ] Bonjour, j'ai un probleme de conversion j'utilise une liaison serie pour communiquer avec un instrument qui me renvoie des tableaux de bytes...  (enf [BAR]Problème de driver pour bouton wireless [ par ScriptingBen ] Bonjour, J'ai un ordinateur portable Amilo Li 1718 avec windows XP et sur mon clavier j'ai un bouton pour activer le réseau sans fil mais comme j'ai driver d'un périphérique USB [ par je_ne_viens_qu1_fois ] Bonjour à tous   <p class="MsoNorma driver en C pour display controlleur ST7565R-G (display 128x64) [ par joseMiguel ] bonjour, Je recherche un driver écrit en C pour controlleur ST7565R-G d'écran graphique (128x64). Merci @+ JoseMiguel Macro et template [ par mezaya ] Bonjour à tous,j'ai un problème avec le préprocesseur c et l'utilisation de template.je n'arrive pas à résoudre le problème suivant :j'ai une macro :# Problème sur une structure [ par Apache_31 ] Bonjour , j'ai un problème avec une structure :typedefstruct{unsignedshort features[3


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales