Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] File Header e variabili globali

    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

    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 :
    codice:
    //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 :
    codice:
    //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 :
    codice:
    //TRE.c
    
    #include "DUE.h"
    
    struct flock L1, L2;      // sono definite e inizializzate in TRE.h
    file DUE.h :
    codice:
    //DUE.h
    
    #ifndef DUE_H
    #define DUE_H
    
    int A = 0; 
    int B = 0;
    
    #endif
    file TRE.h :
    codice:
    //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
    codice:
    //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

  2. #2
    Il file "TRE.c" dovrebbe includere "TRE.h" e non "DUE.h" :master:
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    è 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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.