PDA

Visualizza la versione completa : [C] File Header e variabili globali


Jokulhaups
25-01-2009, 04:44
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 FVARI TENTATIV E MI SEMBRA CHE QUESTA SIA LA PIų GIUSTA, MA EVIDENTEMENTE NON LO P :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 "DUE.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


//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 :




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

Samuele_70
25-01-2009, 10:59
Il file "TRE.c" dovrebbe includere "TRE.h" e non "DUE.h" :master:

Jokulhaups
25-01-2009, 12:10
č solo un'errore di trascrizione, ho cambiato i nomi dei file per renderlo pių leggibile qui sul forum, il file TRE.c include TRE.h ovviamente :)

Loading