Yunchi
Messages postés100Date d'inscriptionlundi 30 octobre 2006StatutMembreDernière intervention14 avril 2009
-
24 juil. 2007 à 04:42
Yunchi
Messages postés100Date d'inscriptionlundi 30 octobre 2006StatutMembreDernière intervention14 avril 2009
-
25 juil. 2007 à 10:05
Bonjour,
J'ai une bibliotheque perso bib.h dans laquelle j'ai mis des variables globales dont une qui est 'int LINE_LENGHT = 200;' declaree entre les #include et les prototypes. Je me sers de cette variable pour declarer ensuite des tableau de char qui doivent avoir la meme taille donc cette variable me permettrait s'il fau changer la taille de ces tableau ne changer qu'une seule variable.
Par exemple dans fonction_file.c j'ai un 'char buffer[50][LINE_LENGHT];' et dans organisation.c j'ai un 'char temp[LINE_LENGHT];'. Lorsque je compile j'ai des erreurs : multiple definition of 'LINE_LENGHT' .... pourtant j'ai d'autre variables globales dont je me sers dans plusieurs fonctions dans plusieurs .c differents et il n'y a aucun probleme ....
Si quelqu'un sait d'ou vien ce probleme ....
ps : j'ai cherche sur le forum et il y a eu pas mal de post sur ce probleme mais je n'ai pas trouve de reponse a mon probleme : /
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 25 juil. 2007 à 09:48
Oui c'est de ma faute j'ai été trop vite en besogne :
#ifdef LINE_LENGHT //Si LINE_LENGHT a déjà été défini
#undef LING_LENGHT //On le supprime des definitions du preprocesseur
#endif //Ferme le #ifdef
#define LINE_LENGHT 200 //On ajoute LINE_LENGHT
cependant tu ne peux remplacer ifdef par ifndef
Le but ici c'est que si le préprocesseur connai déjà un LINE_LENGHT (déclarer quelques part dans tes includes) on lui fasse oublier cette ancienne définition.
De cette mannière, que le preprocesseur connaisse ou non LINE_LENGHT, c'est ton #define qui sera prit en compte.
Cependant je répète qu'il est préférable que tu change le nom de ton LINE_LENGHT car celui qui est définit dans tes includes est peut-etre utilisé en interne par des macro et si tu en utilise (souvent sans le savoir) tu modifie leur comportement. Aussi, il est préférable de changer le nom de ton define en mettant par exemple LENGHT_OF_LINE ou LINELENGHT, ....
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 24 juil. 2007 à 12:07
Salut !
Il y a fort à parier que quelque chose s'apelle déjà LINE_LENGHT dans un des includes que tu fait au dessus.
exemple :
dans truc.h
int LINE_LENGHT = XXXXX;
dans bib.h
int LINE_LENGHT = 200;
dans fonction_file.c :
#include "bib.h" //Premiere définition de LINE_LENGHT
#include "truc.h" //Seconde définition de LINE_LENGHT => Erreur
char buffer[50][LINE_LENGHT]; //Quel définition utiliser ?
Solution : change le nom de ta variale globale.
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 24 juil. 2007 à 15:57
Une variable déclaré dans un header ?
Ben tu pourrais faire quelque chose comme:
#ifndef MYVAR
#define MYVAR
int myvar = 10;
#else
extern int myvar;
#endif
Cependant, la méthode qu'a proposé BruNews fais tout aussi bien et est bien plus propre.
.c
int myvar = 10;
.h
#ifndef _HEADER_INCL // Début du .h
#define _HEADER_INCL
...
extern int myvar;
...
#endif // Fin du .h
Simple remarque au passage. Ce message est dans le thème C. Cependant, il est impossible de donner, pour taille d'un tableau, une variable en C.
Cette valeur DOIT être constante (et je ne parle pas de variable constante ici (const int)).
Yunchi
Messages postés100Date d'inscriptionlundi 30 octobre 2006StatutMembreDernière intervention14 avril 2009 25 juil. 2007 à 03:54
ah donc il n'est pas possible de declarer un tableau de char avec une variable ....
J'ai egalement essayer de mettre #define LINE_LENGHT 200 pour ensuite pouvoir declarer mon tableau de char avec char temp[LINE_LENGHT]; mais j'ai eu egalement le probleme du multiple definition of
J'ai scanner l'ensemble des fichiers de mon projet et il n'y a pas d'autre LINE_LENGHT a part celui defini dans la bibliotheque
Donc quel serait la methode si par exemple dans l'ensemble de mes .c jai plusieur declaration int nb[LINE_LENGHT]; ou char temp[LINE_LENGHT];. Comment devrais je declarer ce LINE_LENGHT dans ma bibliotheque afin que lorsque je veux changer cette valeur je n'ai qu'a le faire une fois et non pour l'ensemble de mes variables.
#ifdef LINE_LENGHT //Si LINE_LENGHT a déjà été défini
#undef LING_LENGHT //On le supprime des definitions du preprocesseur
#define LINE_LENGHT 200 //On ajoute LINE_LENGHT
#endif
Ca devrait marcher. Sauf que si tu as besoin du LINE_LENGHT contenu dans un des #include que tu fait, ben tu es mal barré ! lol
Yunchi
Messages postés100Date d'inscriptionlundi 30 octobre 2006StatutMembreDernière intervention14 avril 2009 25 juil. 2007 à 09:21
en utilisant
#ifdef LINE_LENGHT //Si LINE_LENGHT a déjà été défini
#undef LING_LENGHT //On le supprime des definitions du preprocesseur
#define LINE_LENGHT 200 //On ajoute LINE_LENGHT
j'ai pleins d'erreurs bizarres qui apparassent ....
j'en ai un peu moins si je met #ifndef LINE_LENGHT a la place du #ifdef mais tjrs une erreur : " unterminated #ifndef " pointe vers #ifndef _BIB_