PDA

View Full Version : [C] File Header e variabili globali


Pompolus
25-01-2009, 12:15
Ciao a tutti,
sto facendo un programma piuttosto complesso in C e mi sto incartando con la compilazione, mi perdo nei meandri degli include e dei vari file header, tenendo conto che ci sono variabili globali lì definite.

Ho fatto vari tentativi e sembra che questa sia la più giusta ma evidentemente non lo è :P

Faccio uno schema di come sono le mie variabili e le mie funzioni, e come ho diviso la dichiarazione e l'inizializzazione nei vari file:

file UNO.c :


//UNO.c

#include "VARIABILE.h"
#include "DUE.h"
#include "TRE.h"


extern int GLOB; //è definita e inizializzata in VARIABILE.h
extern int A, B; //sono definite e inizializzate in DUE.h
extern struct flock L1, L2; // sono definite e inizializzate in TRE.h



file DUE.c :

//DUE.c

#include "VARIABILE.h"
#include "DUE.h"

int A, B; //sono definite e inizializzate in DUE.h
extern int GLOB; //è definita e inizializzata in VARIABILE.h



file TRE.c :

//TRE.c

#include "TRE.h"

struct flock L1, L2; // sono definite e inizializzate in TRE.h



file DUE.h :

//DUE.h

#ifndef DUE_H
#define DUE_H

int A = 0;
int B = 0;

#endif



file TRE.h :

//TRE.h

#ifndef TRE_H
#define TRE_H

struct flock L1 = {F_RDLCK, SEEK_SET, 0, 0};
struct flock L2 = {F_WRLCK, SEEK_SET, 0, 0};

#endif



file VARIABILE.h :


//VARIABILE.h

#ifndef VARIABILE_H
#define VARIABILE_H

int GLOB = 0;

#endif



l'errore del compilatore è chiaro, le variabili vengono definite più volte quindi sto chiaramente sbagliando qualcosa con le disposizioni delle variabili deni vari header e relativa dichiarazione all'interno degli header e .c.

quetso è l'output di compilazione :

codice:
UNO.o(.bss+0x0): multiple definition of `VARIABILE'
DUE.o(.bss+0x0): first defined here
UNO.o(.bss+0x4): multiple definition of `L1'
TRE.o(.bss+0x0): first defined here
UNO.o(.data+0x0): multiple definition of `L2'
TRE.o(.data+0x0): first defined here
UNO.o(.bss+0x14): multiple definition of `A'
DUE.o(.bss+0x4): first defined here
UNO.o(.bss+0x18): multiple definition of `B'
DUE.o(.bss+0x8): first defined here




Se potete dirmi come disporre le varie cose mi sareste di grande aiuto e se qualcuno mi spiega più in generale dove vanno dichiarate le variabili globali per permettere a vari ".c" di usufruirne, mi fareste ancora più felice


Grazie in anticipo