Rechercher : dans
Par :

Variables globales en C

Dernière réponse le 27 nov 2008 à 15:47:53 crazyghandi, le 27 nov 2008 à 14:52:42 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Opera 9.62

Meilleures réponses pour « variables globales en C » dans :
Les variables en C++ VoirLes variables en C++ 1. Les différents types de variables 1.1 bool 1.2 char 1.3 unsigned short int 1.4 short int 1.5 unsigned long int 1.6 long int 1.7 int (16 bits) 1.8 int (32 bits) 1.9 unsigned int (16 bits) 1.10 unsigned int (32...
Que fait un fork() ? Voir...ou le petit fork() illustré.... Introduction Lancement du père Le fork Maîtriser le fil d'exécution du père et celui du fils Les variables et les descripteurs de fichiers La synchronisation La fin Notes et...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...
Langage C++ - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C++ sont typées, c'est-à-dire que les données contenues dans...
Java: les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Java sont typées, c'est-à-dire que les données contenues dans...

1

dubcek, le 27 nov 2008 à 14:56:47

Helllo
y a-t-il un include fonctions.h dans le fichier fonctions.c ?

Répondre à dubcek

2

mype, le 27 nov 2008 à 14:57:13

T'as bien incul fonction.h dans fonction.c ?

Répondre à mype

3

lami20j, le 27 nov 2008 à 15:02:46

Salut,

t'as bien incul fonction.h
Obsédé ;-DDDDD
106485010510997108

Répondre à lami20j

6

mype, le 27 nov 2008 à 15:06:59

Lol
faute de frappe ^^

Répondre à mype

4

crazyghandi, le 27 nov 2008 à 15:04:17

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

Répondre à crazyghandi

5

crazyghandi, le 27 nov 2008 à 15:06:17

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

Répondre à crazyghandi

7

Char Snipeur, le 27 nov 2008 à 15:10:05

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

8

crazyghandi, le 27 nov 2008 à 15:15:21

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

Répondre à crazyghandi

9

Char Snipeur, le 27 nov 2008 à 15:24:53

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

10

crazyghandi, le 27 nov 2008 à 15:32:02

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

Répondre à crazyghandi

11

Char Snipeur, le 27 nov 2008 à 15:46:43

Bien sur qu'il faut tout lier ensemble !
Pour éviter les définitions multiples, fait ce que je t'ai dit ! Salutation !
Char Snipeur

Répondre à Char Snipeur

12

 crazyghandi, le 27 nov 2008 à 15:47:53

Bon j'ai finalment reussi tout marche nikel a present je vous remercie beaucoup a bientot

Répondre à crazyghandi