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
A voir également:
- Variables globales en C
- [VBA] Variables globales ✓ - Forum VB / VBA
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Bash addition 2 variables ✓ - Forum Shell
- Echange de variables globales entre fichiers programmes - Forum Python
11 réponses
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
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
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.
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
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.h
truc.c
main.c
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.
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.
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
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