Variable extern

Fermé
sam59470 Messages postés 30 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 18 novembre 2011 - 29 mars 2011 à 17:08
 le père - 29 mars 2011 à 18:03
Bonjour,

j'ai un problème avec une variable que je dois rendre extern.

lors de la compilation j'ai une erreur

stat.h:4: error: storage size of `stat_fix_serveur' isn't known


Le fichier stat.h :

#ifndef _STAT_H_
#define _STAT_H_

struct stat_fix stat_fix_serveur;
struct stat_cl* stat_clients;

extern void afficherstat();
extern void init();
#endif


le fichier stat.c :

#include "stat.h"
#include "config.h"
/* statistique global du serveur */
struct stat_fix { 
	int nbclient = 0;
	int ligneR = 0;
	int ligneE = 0;
};

/* statistique pour les client du serveur */
struct stat_cl {
	int Max_nb_client =0;
	int Max_nb_liR_cl =0;
	int Max_nb_liE_cl =0;
};



struct stat_fix stat_fix_serveur;
struct stat_cl* stat_clients;
void init(){
	stat_fix_serveur = malloc(sizeof(int)*4);
	stat_cl = malloc(sizeof(int)*4*MAX_CONNECTION);	
}


MakeFile :
CC      = gcc
CFLAGS  = -Wall -Werror -ansi -pedantic 
CFLAGS += -D_XOPEN_SOURCE=500
CFLAGS += -DDEBUG
CFLAGS += -g


BINARIES = 	mtcs
OBJECTS = 	mtcs.o tools.o cnct.o stat.o

all : $(BINARIES) $(OBJECTS)

###------------------------------
### Entries
###------------------------------------------------------------
mtcs : $(OBJECTS)
	$(CC) -o $@ $^

###------------------------------
### Dependencies
###------------------------------------------------------------
# thanks to 'make depend'
stat.o: stat.c stat.h
cnct.o: cnct.c config.h tools.h cnct.h stat.h
mtcs.o: mtcs.c tools.h config.h cnct.h stat.h
tools.o: tools.c tools.h

###------------------------------
### Misc.
###------------------------------------------------------------
.PHONY: clean realclean depend
clean::
	$(RM) $(BINARIES)
realclean:: clean 
	$(RM) $(OBJECTS) $(TRASHFILES)
depend: 
	$(CC) $(CFLAGS) -MM *.c 



Je prense que c'est un problème de linkage mais je ne trouve pas où.

Merci d'avance.

1 réponse

Bonjour

Ton problème, c'est que tu utilises la structure stat_fix (pour définir la variable stat_fix_serveur) avant de la définir.
Tu t'en sers dans ton fichier stat.h qui est inclus dans stat .c avant la définition de la structure.
Le mieux pour résoudre ça est de mettre la définition de la structure au début de stat.h

Ce n'est ni une question d'extern, ni une question de linkage, juste une question d'ordre entre la définition de la structure et son utilisation.
0