Variables globales en C
Résolu
crazyghandi
Messages postés
323
Statut
Membre
-
crazyghandi Messages postés 323 Statut Membre -
crazyghandi Messages postés 323 Statut Membre -
Bonjour,
je declare des variables dans un functions .h
dans mon main jinclude functions.h et tout marche nikel
en revanche dans fonctions.c les declarations dans functions.h nont pas ete prises en compte
quelqu'un a une idee ?
merci d'avance pour vos reponses
je declare des variables dans un functions .h
dans mon main jinclude functions.h et tout marche nikel
en revanche dans fonctions.c les declarations dans functions.h nont pas ete prises en compte
quelqu'un a une idee ?
merci d'avance pour vos reponses
Configuration: Windows XP Opera 9.62
11 réponses
-
helllo
y a-t-il un include fonctions.h dans le fichier fonctions.c ? -
t'as bien incul fonction.h dans fonction.c ?
-
Salut,
t'as bien incul fonction.h
Obsédé ;-DDDDD
-
ah non je vien de le faire c'est deja bocou mieu
me il me dit qu'il y'a deux variables qui ont ete multiply defined -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
dans functions.h
typedef struct object object;
struct object
{
int a;
int size;
char n[30];
unsigned short *serial;
char mdate[30];
char parent[30];
struct object *nxt;
};
typedef object *list;
object *dlist = NULL;
object *flist = NULL;
et il me dirt lors de la compilation que dlist et flist sont deja declares -
Normal, on ne définie jamais des variables dans un fichier en-tête.
Les en têtes ne servent qu'au déclarations.
Donc, si tu tiens à conserver tes variables globales, met un "extern" devant leur déclaration et supprime tout assignement ET remet les définitions dans un .c, n'importe lequel, même un nouveau. -
ok merci pour les reponses
donc nouvo functions.h
typedef struct object object;
struct object
{
int a;
int size;
char n[30];
unsigned short *serial;
char mdate[30];
char parent[30];
struct object *nxt;
};
typedef object *list;
void disp(unsigned short *a, char *b, int c, char *d, char *e);
char *find_mdate (const char *obj);
void add_dir(const char *n, const char *p,unsigned short *q);
void add_file(const char *n, const char *p,unsigned short *q);
void analyse_dir(DIR *rep, const char *p);
et j'ai remis dans le main.c :
#include "functions.h"
extern object *dlist = NULL;
extern object *flist = NULL;
extern char s2[32];
int main (int argc, char *argv[]) {
pourtant lors de la compilation il me dit que dans functions.c dlist et flist et s2 ne sont pas declarees -
Normal, tu ne les as pas déclaré dans fonction.h !
Attention à ce que j'ai écris, il y a une différence entre déclaration et définition/assignement !
Exemple :
truc.hextern int a;
truc.c#include "truc.h" int a=32;
main.c#include "truc.h" int main() { a=a+3; return 0; }
La déclaration sert à annoncer au compilateur que dans l'unité de compilation (le .c plus les include) tu utilisera une variable nommé 'a' de type 'int'.
La définition sert à dire au compilateur que tu crée une variable ayant pour nom 'a' pour type 'int' et qu'il doit donc prévoir l'espace mémoire nécessaire pour cette variable. Puis avec le '=' tu lui dit quelle valeur doit prendre cette variable. -
je deprime
eske il fo linker main et functions
si je link que main il me dit que ya 2 de mes 5 fonctions qui sont "unidentified symbol dans main
si je link les 2 il me dit que dlist et flist son multiply defined -
Bien sur qu'il faut tout lier ensemble !
Pour éviter les définitions multiples, fait ce que je t'ai dit ! -
bon j'ai finalment reussi tout marche nikel a present je vous remercie beaucoup a bientot