Variable globale [Resolu]

Variable globale [Resolu] - C - Programmation

Marsh Posté le 19-09-2007 à 12:50:11    

Bonjour,  
 
je souhaiterais déclarer dans un .h une varibale du type : char * Toto[3]={"A","B","C"}
 
et l'utiliser dans deux fichier fic1 et fic2 qui incluent tout les deux mon .h.
 
Mon problème c'est qu'à la compilation il me jette en me disant :  multiple definition of 'Toto'
 
J'ai essayé de déclaré la variable en extern mais il n'a pas l'air d'aimer l'initialisation.
 
Merci pour vos réponses

Message cité 1 fois
Message édité par Edgar_Perry le 19-09-2007 à 15:54:43
Reply

Marsh Posté le 19-09-2007 à 12:50:11   

Reply

Marsh Posté le 19-09-2007 à 12:51:01    

mot clé "extern".

Reply

Marsh Posté le 19-09-2007 à 13:27:59    

C'est ce que je disais dans mon message précédent. Si j'utilise le mot clé extern j'ai l'erreur : warning: `Toto' initialized and declared `extern'

Reply

Marsh Posté le 19-09-2007 à 13:38:27    

Edgar_Perry a écrit :

je souhaiterais déclarer dans un .h une varibale du type : char * Toto[3]={"A","B","C"}

 

et l'utiliser dans deux fichier fic1 et fic2 qui incluent tout les deux mon .h.

 

Mon problème c'est qu'à la compilation il me jette en me disant :  multiple definition of 'Toto'

 

J'ai essayé de déclaré la variable en extern mais il n'a pas l'air d'aimer l'initialisation.


Les globales, çaÿ mal...

 

http://mapage.noos.fr/emdel/notes.htm#globales

 

Si ça ne marche pas, montre ton code.

 


Message édité par Emmanuel Delahaye le 19-09-2007 à 13:39:52

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-09-2007 à 14:01:57    

Je sais que c'est mal :) mais j'ai un tableau avec un contenu fixe que je veux utiliser dans plusieurs sources et je voulais éviter de déclarer x fois ce tableau.  
 
J'ai lu le lien et je suis arrivé à compiler en faisant ça :
 
toto.h  
/*Declaration de la varible*/
char * Toto[3];
 
Fic1.c
#include "Toto.h"
/*Initialisation*/
char *Toto[3]= {"A","B","C"};
 
Ficn.c
#include "Toto.h"
extern char * Toto[3];
 
Est-ce que c'est bon ?
 
 
 
 
 
 
 

Reply

Marsh Posté le 19-09-2007 à 14:20:54    

Edgar_Perry a écrit :

Je sais que c'est mal :) mais j'ai un tableau avec un contenu fixe que je veux utiliser dans plusieurs sources et je voulais éviter de déclarer x fois ce tableau.  
 
J'ai lu le lien et je suis arrivé à compiler en faisant ça :
 
toto.h  
/*Declaration de la varible*/
char * Toto[3];
 
Fic1.c
#include "Toto.h"
/*Initialisation*/
char *Toto[3]= {"A","B","C"};
 
Ficn.c
#include "Toto.h"
extern char * Toto[3];
 
Est-ce que c'est bon ?


 
Non  (voir différence entre "déclaration" et "définition" )
 
Là où ton tableau est créé (fic1.c), tu le définis et tu l'initialises
Là où ton tableau est utilisé (partout ailleurs) tu le déclares juste en extern. A la limite tu le mets en extern dans le .h et tu inclus ce .h partout où t'en as besoin...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 19-09-2007 à 14:25:51    

Rhaaaaa punaise je tourne en rond. Et l'initialisation de mon tableau je la fait où? Le but est de faire l'initialisation qu'une seule fois.

Reply

Marsh Posté le 19-09-2007 à 14:30:37    

Bon je crois que j'y suis arrivé :
 
Toto.h
extern char * Toto[3];
 
 
Fic1.c
#include "Toto.h"
char * Toto[3]= {"A","B","C"};
/*...*/
/*Lecture d'un element*/
 
 
Ficn.c
#include "Toto.h"
/*...*/
/*Lecture d'un element*/

Reply

Marsh Posté le 19-09-2007 à 14:53:09    

const char *Toto[3] dans ce cas-là, comme ça tu indiques très clairement à toute personne lisant ton code que ce tableau est en lecture seule.

Reply

Marsh Posté le 19-09-2007 à 15:55:01    

merci a tous pour votre aide

Reply

Marsh Posté le 19-09-2007 à 15:55:01   

Reply

Marsh Posté le 19-09-2007 à 21:45:24    

Edgar_Perry a écrit :

Et l'initialisation de mon tableau je la fait où? Le but est de faire l'initialisation qu'une seule fois.


Ben comme je l'ai dit dans mon post juste avant, dans "fi1.c"
 

Edgar_Perry a écrit :

Bon je crois que j'y suis arrivé :
 
Toto.h
extern char * Toto[3];
 
 
Fic1.c
#include "Toto.h"
char * Toto[3]= {"A","B","C"};
/*...*/
/*Lecture d'un element*/
 
 
Ficn.c
#include "Toto.h"
/*...*/
/*Lecture d'un element*/


 
Exactement comme j'avais dit !!! Encore un qui ne lit pas les conseils qu'on lui donne  :sarcastic:


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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