appunti3s:sorgenti_multifile
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | appunti3s:sorgenti_multifile [2020/06/08 22:20] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Sorgenti multifile ====== | ||
+ | Durante la realizzazione di un software costituito da un //main()// e numerose funzioni, può risultare utile dividere " | ||
+ | In questo modo diventa più facile apportare modifiche e leggere il codice, soprattutto nei programmi di grandi dimensioni. | ||
+ | Inoltre, siccome in certi casi il compilatore può compilate le singole parti anche individualmente, | ||
+ | |||
+ | Nel seguente esempio riprenderemo un semplicissimo programma, che sarebbe stato inutile dividere in più file, ma che comunque divideremo per esercizio, per poter capire come procedere anche nei casi più complicati. | ||
+ | |||
+ | <file c main.cpp> | ||
+ | /** @file main.cpp | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | |||
+ | int triplicare(int x) | ||
+ | { | ||
+ | return 3*x; | ||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | int mioNumero, | ||
+ | |||
+ | std::cout << "Per favore scrivi un numero intero: "; | ||
+ | std::cin >> mioNumero; | ||
+ | mioTriplo = triplicare(mioNumero); | ||
+ | std::cout << "il triplo di " << mioNumero << " vale " | ||
+ | << mioTriplo << endl; | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | La cosa che sembra più semplice da fare è quella di dividerlo in due file sorgenti. | ||
+ | |||
+ | ATTENZIONE: c'è grave un errore nel seguente file // | ||
+ | <file c triplicare.cpp> | ||
+ | /** @file triplicare.cpp | ||
+ | * | ||
+ | */ | ||
+ | int triplicare(int x) | ||
+ | { | ||
+ | return 3*x; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <file c main.cpp> | ||
+ | /** @file main.cpp | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | // ERRORE qui manca una dichiarazione | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | int mioNumero, | ||
+ | |||
+ | std::cout << "Per favore scrivi un numero intero: "; | ||
+ | std::cin >> mioNumero; | ||
+ | mioTriplo = triplicare(mioNumero); | ||
+ | std::cout << "il triplo di " << mioNumero << " vale " | ||
+ | << mioTriplo << endl; | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | NOTA: bisogna usare **#include < | ||
+ | |||
+ | Quando il compilatore legge il contenuto del file //main()// trova la chiamata alla funzione // | ||
+ | < | ||
+ | Dopo questa correzione, i due file sorgente non vanno compilati separatamente, | ||
+ | |||
+ | * Il primo comando serve a generare due file oggetto (compilatore) | ||
+ | * < | ||
+ | * Il secondo comando serve a collegarli in un unico file eseguibile (linker) | ||
+ | * < | ||
+ | |||
+ | In questo modo il programma viene compilato senza errori, ma il codice può essere ancora migliorato. | ||
+ | Infatti, se per poter usare // | ||
+ | |||
+ | Si può creare un nuovo file di intestazione (header file) chiamato // | ||
+ | |||
+ | <file c triplicare.h> | ||
+ | /** @file triplicare.h | ||
+ | * | ||
+ | */ | ||
+ | int triplicare(int x); | ||
+ | </ | ||
+ | |||
+ | <file c triplicare.cpp> | ||
+ | /** @file triplicare.cpp | ||
+ | * | ||
+ | */ | ||
+ | int triplicare(int x) | ||
+ | { | ||
+ | return 3*x; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <file c main.cpp> | ||
+ | /** @file main.cpp | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | #include " | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | int mioNumero, | ||
+ | |||
+ | std::cout << "Per favore scrivi un numero intero: "; | ||
+ | std::cin >> mioNumero; | ||
+ | mioTriplo = triplicare(mioNumero); | ||
+ | std::cout << "il triplo di " << mioNumero << " vale " | ||
+ | << mioTriplo << endl; | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | La differenza tra le virgolette di " | ||
+ | |||
+ | Si può pensare a // | ||
+ | |||
+ | Nulla vieta di racchiudere tutti gli header necessari al // | ||
+ | |||
+ | <file c main.h> | ||
+ | /** @file main.h | ||
+ | * | ||
+ | */ | ||
+ | #include < | ||
+ | #include " | ||
+ | </ | ||
+ | |||
+ | {{ : |
appunti3s/sorgenti_multifile.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1