INTRODUZIONE ALLA PROGRAMMAZIONE IN C



File header



Se adottiamo un approccio modulare, allora risultera' spontaneo mantenere all'interno di ogni modulo la definizione delle variabili, i prototipi di funzioni, e cosi' via. Comunque sorge un problema nel caso in cui piu' moduli necessitino la condivisione di tali definizioni. E' consigliabile centralizzare la definizione in un file e condividerlo poi con gli altri moduli. I file di questo tipo sono chiamati solitamente "header file". Le convenzioni stabiliscono che questi file abbiano un suffisso ".h". Abbiamo gia' incontrato in precedenza file header delle librerie standard, come ad esempio: #include <stdio.h> Siamo in grado di definire dei file header propri, ed includerli poi nei programmi con un'istruzione del tipo: #include "my_head.h" E' importante notare che il file header solitamente contengono solo definizioni di tipi di dati, prototipi di funzioni e comandi per il preprocessore C. Se abbiamo, ad esempio, tre moduli: main.c WriteMyString.c header.h solitamente ogni singolo modulo verra' compilato separatamente. Alcuni moduli hanno un #include "header.h" per accedere alle definizioni comuni. Alcuni altri, come main.c, includono anche file header standard. Nell'esempio accennato, "main" richiama la funzione WriteMyString.c() che e' nel modulo WriteMyString.c. In quest'ultima funzione potrebbe essere richiamato un prototipo di funzione "void" che viene definito in header.h. Notiamo che in generale e' necessario decidere tra il desiderio che ogni modulo ".c" possa accedere alle informazioni di cui necessita unicamente per il proprio lavoro, e la realta' pratica di mantenere molti file header. Per i programmi di moderate dimensioni, probabilmente e' meglio mantenere uno o due file header che condividano le definizioni di piu' di un modulo. Un problema finora tralasciato in merito all'approccio modulare riguarda le variabili di sharing. Se abbiamo delle variabili globali dichiarate ed utilizzate nel modulo corrente, in che modo e' possibile fare riconoscere tali variabili agli altri moduli? Possiamo passare i valori come parametri delle funzioni, ma: