• Non ci sono risultati.

Corso di Fondamenti di Informatica Visibilità e tempo di vita delle variabili

N/A
N/A
Protected

Academic year: 2022

Condividi "Corso di Fondamenti di Informatica Visibilità e tempo di vita delle variabili"

Copied!
17
0
0

Testo completo

(1)

Anno Accademico 2013/2014 Francesco Tortorella

Università degli Studi

di Cassino e del Lazio Meridionale

Corso di Fondamenti di Informatica

Visibilità e tempo di vita

delle variabili

(2)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Il concetto di visibilità

• Un programma C++ può assumere una struttura complessa grazie all’uso dei

sottoprogrammi (programma costituito da più sottoprogrammi su più file sorgente).

• Questo rende necessario definire delle regole per l’uso degli oggetti (variabili,

costanti, funzioni) definite nel programma.

• In particolare, tali regole precisano in quali parti del programma è possibile usare un certo identificatore (visibilità).

(3)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Visibilità delle variabili. Ambiente

• L’insieme delle variabili definite in un

sottoprogramma (sia funzione che procedura) può dividersi in due insiemi:

– Parametri formali: utilizzati per gestire il flusso di dati con il chiamante

– Altre variabili utilizzate per implementare l’algoritmo nel sottoprogramma (es. indici, variabili di appoggio, ecc.

• L’insieme di queste variabili viene definito ambiente del sottoprogramma.

• Analogamente, l’insieme delle variabili definite nel chiamante costituisce l’ambiente del

chiamante.

(4)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Ambienti e visibilità

• Quale relazione esiste tra ambiente del chiamante e ambiente del

sottoprogramma ?

• In altre parole, il sottoprogramma ha la

visibilità (cioè, può fare uso) delle variabili del chiamante e viceversa ?

(5)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Ambienti e visibilità

• Sono due ambienti distinti per cui:

– Le variabili del chiamante non sono visibili dal sottoprogramma e viceversa.

– Nei due ambienti possono quindi esistere variabili con lo stesso nome, ma sono due variabili distinte e separate.

– L’unico canale per scambiarsi dati è quindi fornito dallo scambio di parametri.

(6)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Visibilità delle variabili

• Le variabili sono locali alle funzioni: sono cioè utilizzabili solo all’interno della

funzione in cui sono definite.

• Più precisamente, la visibilità si riferisce al blocco in cui sono definite.

(7)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

#include<iostream>

using namespace std;

int doppia(int x);

int main() { int a,b,c;

cout << “a: “; cin >> a;

b=doppia(a);

c=doppia(b);

cout<<“a: “<<a<<endl;

cout<<“b: “<<b<<endl;

cout<<“c: “<<c<<endl;

return(EXIT_SUCCESS);

}

int doppia(int x) { int a;

a=x;

{

int c;

c=a;

a=2*c;

}

return(a);

}

Visibilità delle variabili

Visibili a, b e c della funzione main

Visibile a della funzione doppia

Visibili a e c della funzione doppia

(8)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Visibilità delle variabili

• All’interno di ogni blocco sono visibili:

– le variabili definite al suo interno – le variabili definite nel blocco che

eventualmente lo contiene

• La definizione di una variabile in un blocco annulla la visibilità di eventuali variabili con lo stesso nome, ma definite in blocchi

esterni.

(9)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Variabili definite nel file

• E’ possibile definire variabili anche al di

fuori di ogni funzione, nel file. Tali variabili saranno visibili in tutto il file, dal punto in cui sono definite in poi.

• La visibilità può estendersi anche ad altri file che, eventualmente, costituiscono il programma.

(10)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Visibilità delle variabili

#include<iostream>

using namespace std;

int doppia(int x);

int tripla(int x);

int z;

int main() { int a,b,c;

cout << “a: “; cin >> a;

b=doppia(a);

c=tripla(a);

cout<<“a: “<<a<<endl; cout<<“b: “<<b<<endl;

cout<<“c: “<<c<<endl;

return(EXIT_SUCCESS);

}

int doppia(int x) { int a;

a=2*x;

return(a);

}

int tripla(int x) { int z;

z=3*x;

return(z);

}

Visibilità di z

Visibilità di z della funzione tripla

(11)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Variabili visibili ad altri file

• Assumiamo che il codice di un programma sia distribuito su 3 file: fil1.cpp, fil2.cpp e fil3.cpp.

• Una variabile definita in uno dei file,

esternamente alle funzioni, può essere visibile anche agli altri file (e alle funzioni in essi

contenute).

• È però necessario introdurre nel file che la userà una dichiarazione della variabile tramite la

parola chiave extern.

Esempio:

int conta; extern int conta;

(12)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Variabili visibili ad altri file

#include <iostream>

#include "calcol.h"

using namespace std;

int conta=0;

int main() {

const float prec=1e-8;

float x,y;

float d;

cout<<"\nCoordinate\n";

cout<<"x: "; cin >>x;

cout<<"y: "; cin >>y;

d=radq(x*x+y*y,prec);

cout<<"\nDistanza: “<<d<<endl;

return (EXIT_SUCCESS);

}

extern int conta;

float assol(float x){

if(x<0)

return(-x);

else

return(x) ; }

float radq(float x,float p){

float yn,yv;

conta=1;

yn=1.0;

do{

yv=yn;

yn=.5*(yv+x/yv);

} while (assol(yn-yv)>=p);

return(yn);

}

(13)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Tempo di vita delle variabili

• Un’altra questione riguarda quando una variabile può essere usata, cioè in quale momento della vita del programma alla variabile è allocata memoria.

• Questo si formalizza con il concetto di classe di memorizzazione (storage class) delle variabili.

(14)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Variabili automatiche

• Le variabili definite in un blocco si

definiscono variabili automatiche in quanto vengono allocate all’inizio dell’esecuzione del blocco e deallocate al termine.

• La conseguenza principale è che queste variabili non conservano il loro valore tra due esecuzioni successive del blocco in quanto generalmente allocate su registri diversi.

(15)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Variabili statiche

• Le variabili definite all’esterno delle funzioni sono allocate all’inizio

dell’esecuzione del programma e

deallocate al termine. Conservano quindi il loro contenuto per l’intera durata del

programma (variabili statiche).

• È possibile rendere statica una variabile automatica tramite lo specificatore

static.

(16)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Variabili statiche

void contachiama() { static int count = 0;

count++;

cout << " Sono stata chiamata ";

cout << count << " volte\n";

}

int main() {

for(int i=0; i<10; ++i ) contachiama();

}

(17)

Fondamenti di

Informatica 2013/2014 Università degli Studi di Cassino e del L.M.

F.Tortorella

Specificatori della classe di memorizzazione

auto: definisce una variabile automatica (puramente opzionale)

static: definisce una variabile statica register: specifica al compilatore che la

variabile sia allocata in uno dei registri interni del processore

Riferimenti

Documenti correlati

• si ha un fading alla Rice in presenza di un termine dominante (in genere cammino LOS, o cammino LOS + cammino riflesso sul terreno) e numerosi cammini che &#34;perturbano&#34;

non identifica in modo univoco l’evento corrispondente ma, così come nella statistica descrittiva si aveva solo l’interesse a conoscere la distribuzione di

I dispositivi di I/O, detti anche “periferiche” del sistema, sono tutte quelle apparecchiature che permettono all’unità centrale di comunicare con il mondo esterno (terminali

Tutoraggio Analisi

Tempo di vita e visibilità sono specificati mediante la CLASSE di MEMORIZZAZIONE  indica il tipo di area di memoria in cui una entità viene memorizzata!. NOTA BENE: In

 Ciascun numero sarà immagazzinato in una piccola porzione di memoria detta variabile costituita da un certo numero di byte.  A ogni variabile il programmatore dà un nome

 Quando un tipo è dichiarato con typedef su strutture aggregate anonime (struct e union senza tag), le variabili di quel nuovo tipo sono considerate dello stesso tipo.

¨  N.B.: La definizione della struttura non provoca allocazione di memoria, ma introduce un nuovo tipo di dato. ¨  La memoria viene allocata solo al