Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    33

    [C] Variabili globali in un progetto

    Ciao a tutti !
    Ho un dubbio sulla dichiarazione delle variabili globali in un progetto. In pratica ho aperto un progetto contenente due file.c, il main e list.c e un header per le liste. Per questo programma devo usare una sola lista globale, ho provato ad inserire la lista nel main.c dichiarandola come TList list; ma nel file list.c quando uso tale lista mi dice lista non dichiarata. Come devo fare per dichiarare una lista visibile a tutti i file ?

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Dichiari la lista all'interno di un file header , e includi l' header in tutti i moduli , file.
    usa le virgolette se il file è nella stessa cartella del progetto "mioheader.h"
    Tecnologia

  3. #3
    Chiarisco: la lista va definita in un solo .c, e dichiarata nel .h con una dichiarazione extern. Ad esempio avrai:
    in main.h
    extern TList list;
    ---
    in main.c:
    #include "main.h"
    TList list;
    ...
    in list.c
    #include "main.h"
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    33
    Originariamente inviato da MItaly
    Chiarisco: la lista va definita in un solo .c, e dichiarata nel .h con una dichiarazione extern.
    Scusa, non ho capito. In che senso "extern" ? e cosa intendi per definita e dichiarata ?

    a quanto ho capito da torn24 dovrei solo scrivere "TList l;" in list.h e poi includere list.h nel main no ?

  5. #5
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Se hai una risposta da Military , ti conviene seguire quella , non la mia , per molti motivi

    Il file header , serve solo per non riscrivere le stesse cose , in ogni file .

    extern Tipolista Mialista


    questo lo potresti scrivere direttamente , nel secondo modulo ,file .

    dici al compilatore , io uso la lista Mialista , ma guarda , non è in questo file , cercala , negli
    altri file , in questo caso la trova nel file main.c
    Tecnologia

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    33
    Capito, quindi nel mio caso avrò (i file sono main.c list.c list.h) :

    in main.c
    TList list;

    in list.h
    extern TList list;

    in list.c
    #include"list.h"

    giusto ?

  7. #7
    Originariamente inviato da Gauss92
    Capito, quindi nel mio caso avrò (i file sono main.c list.c list.h) :

    in main.c
    TList list;

    in list.h
    extern TList list;

    in list.c
    #include"list.h"

    giusto ?
    In genere la dichiarazione extern la metti nel .h relativo al .c in cui definisci la variabile. L'idea è che, se vuoi accedere a variabili "esportate" da main.c, ti basta includere main.h.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    33
    Il fatto è che io non uso un main.h, di solito uso info.h e info.c per la dichiarazione dei dati e list.h list.c per le funzioni di gestione quindi il main.h non mi serve. In questo mio caso dovrei dichiarare la lista in list.c normalmente, poi come extern in list.h e infine includere il list.h nel main giusto ? anche se dichiarare la lista nel file list.c è innaturale

  9. #9
    Puoi fare come ti pare, l'importante è che alla fine la lista sia definita in un solo .c e dichiarata (con dichiarazione extern) là dove serve usarle. Quella che ti ho detto è semplicemente la convenzione più usata: ad ogni .c corrisponde un .h in cui sono dichiarate le funzioni e le variabili che si vogliono rendere visibili agli altri moduli; in questa maniera se ti serve usare una funzione/variabile di pippo.c sai che ti basta includere pippo.h.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    33
    quindi la dizhiarazione exter va fatta in ogni file dove intendo usare la lista !
    era questo che non capivo, grazie mille a entrambe per le risposte !

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 © 2024 vBulletin Solutions, Inc. All rights reserved.