Variables globales en C

Résolu/Fermé
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 - 27 nov. 2008 à 14:52
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 - 27 nov. 2008 à 15:47
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 18785 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 6 mai 2025 5 631
27 nov. 2008 à 14:56
helllo
y a-t-il un include fonctions.h dans le fichier fonctions.c ?
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
27 nov. 2008 à 14:57
t'as bien incul fonction.h dans fonction.c ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
27 nov. 2008 à 15:02
Salut,

t'as bien incul fonction.h
Obsédé ;-DDDDD
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
27 nov. 2008 à 15:06
lol
faute de frappe ^^
0
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
27 nov. 2008 à 15:04
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 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
27 nov. 2008 à 15:06
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
27 nov. 2008 à 15:10
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 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
27 nov. 2008 à 15:15
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
27 nov. 2008 à 15:24
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 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
27 nov. 2008 à 15:32
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
27 nov. 2008 à 15:46
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 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 19
27 nov. 2008 à 15:47
bon j'ai finalment reussi tout marche nikel a present je vous remercie beaucoup a bientot
0