Variable extern

sam59470 Messages postés 38 Statut Membre -  
 le père -
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

le père
 
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