Esempio:
void foo()
{
int i = 1;
printf ("%d\n", i); // modalità C
int j = 1; // Non permesso in C
printf ("%d\n", j);
for (int k = 1; k < 10; k++) // Davvero non permesso in C
printf ("%d\n", k);
}
Appena dichiari una variabile, essa è visibile nel blocco di codice
in cui è stata dichiarata (un blocco di codice inizia con una "{" e
finisce con una "}").
Ma dopo la fine del blocco, o prima della dichiarazione, la variabile non
sarà utilizzabile. Per chiarire vediamo degli esempi sbagliati:
{
// Dopo questa linea (quella del for), i sarà visibile (per convenzione)
// solo nel blocco di codice seguente. (Nota: nelle prime versioni dello
// standard del C++, era visibile anche per tutto il resto della funzione.
// Ma adesso questa regola non è più valida, e le cose sono un po' più logiche).
for (int i = 0; i < 5; i++) // Dichiarazione di i per l'intero ciclo
{ // Inizio del blocco dentro cui i è "viva" e rimane dichiarata
int j;
} // Dopo questo }, i e j sono sconosciute
// Poichè i è morta, non è più dichiarata, perciò questo è permesso:
// in altri termini occorre dichiarare una nuova variabile i.
// scrivendo for (int i = 0; i < 5; i++)
for (i = 0; i < 5; i++)
{
}
j = 2; // errore: j non dichiarata
do
{
FILE *f = fopen ("my_file", "r");
}
while (f == NULL); // f sconosciuta, ERRORE
}