[:it]
PREMESSA
L’idea di organizzare i programmi in moduli funzionalmente indipendenti porta con sé la necessità di definire, all’interno della funzione, tutte le variabili necessarie al suo funzionamento: in realtà spesso, in un programma, una funzione può condividere variabili con altre funzioni.
SVILUPPO
In un programma si possono distinguere:
- variabili globali: vengono definite all’inizio del programma e che possono essere usate dal programma principale e da tutte le funzioni
- variabili locali: vengono dichiarate all’interno della funzione che le utilizza e che non sono visibili alle altre funzioni
Anche le variabili dichiarate nel main sono di tipo locale ossia visibili dal main stesso.
#include … | prototipi delle funzioni predefinite |
tipo nome;
… |
variabili globali; |
tipo nome funzione(parametri); | prototipi delle funzioni del programmatore; |
int main()
|
funzione principale |
{
tipo nome; … return 0; } |
variabili locali |
tipo nomefunzione(parametri) | |
{tipo nome;
… return…: } |
variabili locali |
CONCLUSIONE
Sulla base del ragionamento fatto in precedenza, appare chiaro che un programma ben strutturato (ossia scritto in modo chiaro, efficace ed efficiente) avrà poche variabili globali e molte variabili locali, proprio per consentire una facile manutenzione del software nel tempo e maggiori possibilità di riutilizzare moduli software in altri programmi.
Tutto questo è molto importante perché significa che per le variabili locali vengono riservate posizioni nella memoria centrale solo al momento dell’esecuzione della funzione. Lo spazio viene creato all’inizio e rilasciato al termine della funzione, liberando quindi spazio nella memoria utente: una ragione in più per usare molte variabili locali e poche variabili globali.
Tuto ciò rende possibile l’utilizzo dello stesso nome di variabile locale in due funzioni diverse.
ESEMPIO1 – nomi diversi nella funzione e nel main
//
// Francesco Bragadin
// visibilità variabili
// nomi diversi della variabile nel main e nella funzione area
//
#include <iostream>
using namespace std;
// definizione della funzione
int area(int a);
int main()
{
int lato;
cout<<“lato: “<<endl;
cin>>lato;
cout<<“Area: “<<area(lato);
return 0;
}
// sviluppo della funzione
int area(int a)
{
return a*a;
}
ESEMPIO 2 – stesso nome della variabile nel main e nella funzione
//
// Francesco Bragadin
// visibilità variabili
// nomi uguali della variabile nel main e nella funzione area
//
#include <iostream>
using namespace std;
// definizione della funzione
int area(int a);
int main()
{
int a;
cout<<“lato: “<<endl;
cin>>a;
cout<<“Area: “<<area(a);
return 0;
}
// sviluppo della funzione
int area(int a)
{
return a*a;
}
ESEMPIO 3- uso della variabile globale
//
// Francesco Bragadin
// visibilità variabili
// nomi uguali della variabile nel main e nella funzione e variabile globale
//
#include <iostream>
using namespace std;
// variabile globale
double pigreco=3.14;
// definizione della funzione
double superficie(int r);
double circonferenza(int r);
int main()
{
int r;
cout<<“raggio: “<<endl;
cin>>r;
cout<<“Superficie: “<<superficie(r)<<endl;
cout<<“Circonferenza: “<<circonferenza(r)<<endl;
return 0;
}
// sviluppo della funzione
double superficie(int r)
{
return r*r*pigreco;
}
double circonferenza(int r)
{
return 2*r*pigreco;
}[:]