Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51

    [C] Variabili in file header .h

    In un codice che sto studiando, mi sono imbattuto in un file di header (che poi viene incluso in piu' file .c) che contiene, oltre agli usuali prototipi delle funzioni, anche delle variabili
    tipo

    int pippo[100]

    e delle strutture, tipo

    typedef struct aaa{
    int c;
    int b;
    char *e;
    char f[120][80];
    }g;

    E' corretto dichiarare questi elementi dentro in file .h ?
    Cosa accade a queste variabili? Sono globali?
    Se si, lo sono anche senza usarle (dentro i file .c) con l'attributo "extern"?
    Ho letto qui:

    http://programmazione.html.it/c/c_46.htm

    ma non capisco se il prefisso "extern" serve solo per le variabili dichiarate in altri moduli (e non sia necessario per quelle dichiarate nelle intestazioni).

    Ciao,

    Zax.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' assolutamente poco corretto porre le variabili nei file include mentre la dichiarazione della struttura va bene.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51
    Grazie Oregon (in pratica stai diventando il mio maestro!).
    Ma perche' questa differenza? Non sono entrambi "variabili" nel senso piu' ampio?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Un attimo ... chiariamo ...

    Nella dichiarazione della struttura come l'hai mostrata, non vengono dichiarate variabili ma definiti tipi di dati. E questo va bene.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51
    Ah ok.
    Un'altra cosa. E' normale usare gli
    #ifdef
    anche dentro le funzioni?

    Tipo

    void pippo(){

    #ifdef QUALCOSA
    etc...

    Grazie,

    Ciao!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì .. normale ...

    Per esempio, se scrivi nelle funzioni del codice che deve essere incluso solamente se si compila in modalita' debug ... o solamente se si sta usando un tipo di CPU particolare ...

  7. #7

    Ho un problema simile... :confused:

    Ho un programma in cui ho dichiarato in un file .h una struttura che voglio usare nella funzione .c, però non me la riconosce quando cerco di utilizzarla Il programma è questo:


    Dizionario.h
    #ifndef DIZIO
    #define DIZIO

    struct traduzione
    {
    char* trad;
    struct traduzione *next;
    };
    struct dizionario
    {
    char *word;
    struct traduzione *t;
    struct dizionario *next;
    };
    struct dizionario loaddict(char **input);
    char* traduct(char **inputfile);
    #endif



    Dizionario.c
    #include<stdio.h>
    struct dizionario loaddict(char **input)
    {
    struct dizionario D;
    .
    ..
    ...
    return D;
    }


    Main.c
    #include<stdio.h>
    #include"Dizionario.h"
    main()
    {
    struct dizionario D;
    D.word="aaa";
    }

    Errore quando compilo Dizionario.c:
    Dizionario.c:4: error: storage size of `D' isn't known
    Mentre il main compila senza errori
    Non è che il file.c dovrebbe vedere le variabili del file.h?

    Ringrazio tutti x le risp.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' non hai aperto un nuovo thread con un titolo appropriato invece di collegarti a questo (del 2005)?

    In ogni caso, a prima vista, mi sembra che dizionario.c non includa dizionario.h ... e in questo caso non conosce la struttura dizionario ...

  9. #9
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    La parola chiave extern può essere utilizzata per dichiarare variabili che non sono dichiarate prima della funzione che la utilizza
    Esempio
    codice:
    void main()
    {
       x = 0;
    }
    
    int x;
    In questo modo darebbe errore poichè x è dichiarata dopo l'utilizzo della funzione main.
    Ma se facciamo cosi

    codice:
    void main()
    {
       extern int x;
       x = 0;
    }
    
    int x;
    Il compilatore non darà errori.
    altro modo in cui può essere usato: oggetti e variabili definiti in altri file cpp non inclusi nel file principale
    codice:
    //Variabile.cpp
    int a = 0;
    codice:
    //Main.cpp
    extern int a;
    void main()
    {a = 2;}
    come puoi vedere i due file, non collegati tra di loro, possono "comunicarsi" le variabili in questo modo.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  10. #10
    Grazie ora ho capito!!!

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.