Visibilità Ambito(_*scope) e Durata delle Variabili(_*lifetime)

Ci sono due tipi fondamentali di ambito: ambito locale ed ambito globale.

Una variabile dichiarata al di fuori di tutte le funzioni si trova in ambito globale. L'accesso a tali variabili può essere fatto da ovunque nel programma. Queste si trovano nel pool globale di memoria, per cui la loro vita coincide con la durata del programma.

Una variabile dichiarata all'interno di un blocco (parte del codice racchiuso tra parentesi graffe) appartiene all' ambito locale. Tale variabile non è visibile (e quindi non disponibile) fuori del blocco, in cui è dichiarata. Il caso più comune di dichiarazione locale è una variabile dichiarata all'interno di una funzione. Una variabile dichiarata localmente, si trova sullo stack, e la durata di tale variabile è uguale alla durata della funzione.

Poiché l'ambito di una variabile locale è il blocco in cui è dichiarata, è possibile dichiarare variabili con lo stesso nome, come quelle di variabili dichiarate in altri blocchi, come pure quelle dichiarate a livelli superiori, fino a livello globale.

Esempio:

void CalculateLWMA(int rates_total,int prev_calculated,int begin,const double &price[])
  {
   int        i,limit;
   static int weightsum=0;
   double     sum=0;
//---
   if(prev_calculated==0)
     {
      limit=MA_Period+begin;
      //--- imposta il valore vuoto per la prima barra limite
      for(i=0; i<limit; i++) LineBuffer[i]=0.0;
      //--- calcola il primo valore visibile
      double firstValue=0;
      for(int i=begin; i<limit; i++)
        {
         int k=i-begin+1;
         weightsum+=k;
         firstValue+=k*price[i];
        }
      firstValue/=(double)weightsum;
      LineBuffer[limit-1]=firstValue;
     }
   else
     {
      limit=prev_calculated-1;
     }
 
   for(i=limit;i<rates_total;i++)
     {
      sum=0;
      for(int j=0; j<MA_Period; j++) sum+=(MA_Period-j)*price[i-j];
      LineBuffer[i]=sum/weightsum;
     }
//---
  }

Prestare attenzione alla variabile i, dichiarata nella riga

      for(int i=begin; i<limit; i++)
        {
         int k=i-begin+1;
         weightsum+=k;
         firstValue+=k*price[i];
        }

Il suo ambito è solo per il ciclo, al di fuori di questo ciclo è un'altra variabile con lo stesso nome, dichiarata all'inizio della funzione. Inoltre, la variabile k viene dichiarata nel corpo del ciclo, il suo ambito è il corpo del ciclo.

Le variabili locali possono essere dichiarate con lo specificatore di accesso static. In questo caso, il compilatore ha una variabile nel pool globale di memoria. Pertanto, la durata di una variabile statica è pari alla durata del programma. Qui la portata di tale variabile è limitata al blocco in cui è dichiarata.

Vedi anche

Tipi di dati, Incapsulamento ed Estensibilità dei Tipi,Inizializzazione delle Variabili, Creazione ed Eliminazione di Oggetti