C - Regole di ambito
Uno scope in qualsiasi programmazione è una regione del programma in cui una variabile definita può avere la sua esistenza e oltre quella variabile non è possibile accedervi. Ci sono tre posti in cui le variabili possono essere dichiarate nel linguaggio di programmazione C:
All'interno di una funzione o di un blocco che viene chiamato local variabili.
Al di fuori di tutte le funzioni che viene chiamato global variabili.
Nella definizione dei parametri di funzione che vengono chiamati formal parametri.
Facci capire cosa sono local e global variabili e formal parametri.
Variabili locali
Le variabili dichiarate all'interno di una funzione o di un blocco sono chiamate variabili locali. Possono essere utilizzati solo da istruzioni che si trovano all'interno di quella funzione o blocco di codice. Le variabili locali non sono note a funzioni esterne alla propria. L'esempio seguente mostra come vengono utilizzate le variabili locali. Qui tutte le variabili a, b e c sono locali rispetto alla funzione main ().
#include <stdio.h>
int main () {
/* local variable declaration */
int a, b;
int c;
/* actual initialization */
a = 10;
b = 20;
c = a + b;
printf ("value of a = %d, b = %d and c = %d\n", a, b, c);
return 0;
}
Variabili globali
Le variabili globali sono definite al di fuori di una funzione, solitamente nella parte superiore del programma. Le variabili globali mantengono i loro valori per tutta la durata del programma ed è possibile accedervi all'interno di una qualsiasi delle funzioni definite per il programma.
È possibile accedere a una variabile globale da qualsiasi funzione. Cioè, una variabile globale è disponibile per l'uso in tutto il programma dopo la sua dichiarazione. Il seguente programma mostra come le variabili globali vengono utilizzate in un programma.
#include <stdio.h>
/* global variable declaration */
int g;
int main () {
/* local variable declaration */
int a, b;
/* actual initialization */
a = 10;
b = 20;
g = a + b;
printf ("value of a = %d, b = %d and g = %d\n", a, b, g);
return 0;
}
Un programma può avere lo stesso nome per le variabili locali e globali, ma il valore della variabile locale all'interno di una funzione avrà la precedenza. Ecco un esempio:
#include <stdio.h>
/* global variable declaration */
int g = 20;
int main () {
/* local variable declaration */
int g = 10;
printf ("value of g = %d\n", g);
return 0;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
value of g = 10
Parametri formali
I parametri formali sono trattati come variabili locali con una funzione in-in e hanno la precedenza sulle variabili globali. Di seguito è riportato un esempio:
#include <stdio.h>
/* global variable declaration */
int a = 20;
int main () {
/* local variable declaration in main function */
int a = 10;
int b = 20;
int c = 0;
printf ("value of a in main() = %d\n", a);
c = sum( a, b);
printf ("value of c in main() = %d\n", c);
return 0;
}
/* function to add two integers */
int sum(int a, int b) {
printf ("value of a in sum() = %d\n", a);
printf ("value of b in sum() = %d\n", b);
return a + b;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30
Inizializzazione delle variabili locali e globali
Quando una variabile locale è definita, non viene inizializzata dal sistema, è necessario inizializzarla da soli. Le variabili globali vengono inizializzate automaticamente dal sistema quando vengono definite come segue:
Tipo di dati | Valore predefinito iniziale |
---|---|
int | 0 |
char | "\ 0" |
galleggiante | 0 |
Doppio | 0 |
puntatore | NULLO |
È una buona pratica di programmazione inizializzare le variabili correttamente, altrimenti il programma potrebbe produrre risultati imprevisti, perché le variabili non inizializzate assumeranno un valore di spazzatura già disponibile nella loro posizione di memoria.