C - variable définie dans plusieurs fichiers

John -  
 naster -
Bonjour,
Je souhaite disposer d'un tableau de chaines de caractères défini dans tout les fichiers de mon code source.
Si je ne le défini que dans un fichier, je ne peux m'en servir dans les autres, mais si je le défini dans tout les fichiers le compilateur m'accuse d'avoir défini plusieurs fois la même variable (il a bien raison me direz vous).
Alors j'ai essayé de le définir complétement dans un fichier, puis de seulement le déclarer dans les autres. Ca marche mais j'ai un warning : "fichier.c:7: attention : array 'mon_tableau’ assumed to have one element".
Le numéro de ligne correspond à la déclaration de mon tableau : "const char *mon_tableau[];"

Comment doit-on faire ?

EDIT ; il se trouve qu'en déclarant de le tableau de cette manière : "const char *mon_tableau[3];" je n'ai plus le warning.
Cool, mais est-ce la solution ou juste une astuce ?
A voir également:

2 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
const char *mon_tableau[];
ne peut pas marcher car le compilateur ne sait pas combien de cases allouées au tableau de pointeurs. Il faut donc spécifier la taille.
Donc ce que tu as fait :
const char *mon_tableau[3];" je n'ai plus le warning.
est tout à fait normal ;-).
Sinon, pour utiliser une variable globale commune à plusieurs fichiers, tu la mets dans le .h avec le mot-clé extern. Ensuite, tu définis la variable dans un fichier.c. Et elle sera visible par les autres fichiers par inclusion du .h.
Cdlt
0
naster
 
Mais comment faire pour avoir un fichier .h avec les var globale sans avoir le problème mentionné plus haut?

Mon fichier .h :
#ifndef DEF_VARGLOBALES
#define DEF_VARGLOBALES

SDL_Surface *ecran = NULL, //Var ecran qui contient tout
*imgFond = NULL, //Image en background
*texte = NULL; //Surface qui contient un texte;
FSOUND_STREAM *musique = NULL; //Musique d'intro
TTF_Font *police = NULL; //Contient la police d'écriture
SDL_Rect pos; //Contient la pos x et y

#endif
0