Variables globales en C

Résolu
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

11 réponses

dubcek Messages postés 19023 Date d'inscription   Statut Contributeur Dernière intervention   5 640
 
helllo
y a-t-il un include fonctions.h dans le fichier fonctions.c ?
0
mype Messages postés 2449 Statut Membre 437
 
t'as bien incul fonction.h dans fonction.c ?
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut,

t'as bien incul fonction.h
Obsédé ;-DDDDD
0
mype Messages postés 2449 Statut Membre 437
 
lol
faute de frappe ^^
0
crazyghandi Messages postés 323 Statut Membre 19
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crazyghandi Messages postés 323 Statut Membre 19
 
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
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
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.
0
crazyghandi Messages postés 323 Statut Membre 19
 
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
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
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.h
extern 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.
0
crazyghandi Messages postés 323 Statut Membre 19
 
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
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
Bien sur qu'il faut tout lier ensemble !
Pour éviter les définitions multiples, fait ce que je t'ai dit !
0
crazyghandi Messages postés 323 Statut Membre 19
 
bon j'ai finalment reussi tout marche nikel a present je vous remercie beaucoup a bientot
0