• Non ci sono risultati.

C funzioni à scope di variabili

N/A
N/A
Protected

Academic year: 2021

Condividi "C funzioni à scope di variabili"

Copied!
10
0
0

Testo completo

(1)

C funzioni à scope di variabili

Per questo motivo il parametro di una function può avere lo stesso nome del parametro effettivo del processo chiamante.

Possiamo definire anche delle variabili globali e delle costanti globali: esse vanno dichiarate all’esterno di qualsiasi function, compreso il main.

Il loro scope comprende tutto il programma sorgente in cui è presente.

Se una variabile v viene definita come globale e poi dichiarata nuovamente locale in una funzione, si dice che

la variabile locale v nasconde la variabile globale v.

(2)

C funzioni à visibilità di variabili

int v=2;

void f( int a) { int v = 4;

printf("in foo v = %d \n”,v);

}

main () {

printf("in main v = %d \n”,v);

{ int v = 3;

printf("in parentesi v = %d \n”,v);

foo(v);

} return 0;

}

(3)

C funzioni à scope di variabili

Un side-effect è la modifica nel corpo di una funzione di una variabile globale

Una funzione non dovrebbe avere side-effect:

Una funzione dovrebbe avere la caratteristica che, al suo ritorno alla

programma chiamante, i soli valori modificati sono i parametri passati per riferimento

I side effect sono spesso origine di errori difficili da individuare

In un programma è buona norma dichiarare una costante come globale

ogni tentativo di modificarne il valore causa un errore di compilazione

Esempio: definire le dimensioni di array come costanti globali all’inizio del

programma rende più facile ritrovarle per la modifica in un secondo

momento

(4)

Semplici regole per la scrittura di buoni programmi

Tutte le variabili globali possono essere richiamate da ogni funzione o procedura ma non è consigliabile utilizzare le variabili globali così che ogni procedura è autosufficiente

• Non ha bisogno di altre variabili oltre le locali e quelle di input/output assegnate nella lista dei parametri formali.

Se tutte le procedure di un programma sono autosufficienti, il programma si dice modulare.

Un programma modulare non ha effetti collaterali (side-effects).

Scrivere del codice senza effetti collaterali è molto semplice: basta fare in modo di servirsi soltanto di variabili che fanno riferimento a termini che o sono dichiarati localmente o sono definiti nella lista dei parametri formali

non deve essere richiamata nessuna variabile globale.

(5)

Funzioni -> Variabili Locali

Tutte le variabili definite all’interno di una funzioni sono

VARIABILI LOCALI, cioè sono “note” (utilizzabili) solo

all’interno delle funzione nella quale sono state definite

Anche i parametri di una funzione sono variabili locali!

(6)

C funzioni à dichiarazione

La dichiarazione di una funzione (prototipo) ha la sintassi:

tipo nome(argomenti);

Dove:

• tipo, nome, argomenti hanno lo stesso significato della sintassi delle definizione

• La dichiarazione è formalmente identica alla prima riga della definizione di funzione, salvo il fatto che deve terminare con un punto e virgola

• i nomi degli argomenti sono fittizi e opzionali (non devono coincidere con quelli dalla definizione); i tipi sono obbligatori

(devono coincidere nello stesso ordine con quelli della definizione) Esempio:

char MiaFunz(int dato, float valore);

char MiaFunz(int, float);

Se in un file di codice sorgente una funzione é chiamata prima di

essere definita, bisogna dichiararla prima di chiamarla

(7)

C funzioni à osservazioni

Nello sviluppo di librerie di funzioni è molto utile l’uso delle dichiarazioni di funzioni

• Come default il corpo di una funzione

può invocare solo le funzioni definite prima

• A priori non si sa la sequenza di

chiamate di funzioni

• Anteponendo le

dichiarazioni a inizio del file, tutte le

funzioni sono visibili a tutte le altre

/* * libreria di funzioni

int mcd(int, int); */

int mcm(int, int);

void

calcola_somma(int,int,int,int,int,int);

void riduci(int ,int );

int mcm(int m1, int m2) { } ...

int mcd(int a,int b) { } ...

void riduci(…) { } ...

void calcola_somma(...) {

} ...

(8)

C funzioni

Nella lista dei parametri formali delle funzioni possiamo inserire altre funzioni o procedure.

Possiamo utilizzare la funzione pot nella lista di un’altra funzione;

ad esempio:

int prova(int h, int pot(x,h), int pot(x,k)) può essere richiamata con l’istruzione

y = prova(int 4, int pot(7,4), int pot(3,5))

(9)

C funzioni

Supponiamo di avere scritto la seguente procedura presentazione:

void presentazione () {

printf(”Questo programma è stato scritto da \n”);

printf(”Pinco Pallino \n”);

}

Una qualsiasi funzione o procedura può richiamare la procedura presentazione;

Ad esempio:

int prova2(int h, void presentazione())

(10)

C funzioni à scope di variabili

Lo scope (visibilità) di elementi del linguaggio (funzioni, variabili, costanti, ...) è la regione del programma in cui la variabile può

essere usata

Finora abbiamo incontrato elementi con visibilità:

Limitata a funzioni: dichiarate nel corpo delle funzioni

Lo scope di elementi del linguaggio (funzioni, variabili, costanti, ...) è dato dalla più piccola istruzione composta (gruppo di istruzioni racchiuso tra due parentesi graffe) che include la sua dichiarazione Visibilità nel file

Visibilità nel blocco

Visibilità nel prototipo di funzione

Riferimenti

Documenti correlati

[r]

Un sistema di disequazioni lineari in due variabili è un insieme di due o più disequazioni lineari in due variabili racchiuse da una parentesi graffa la cui

Come abbiamo visto (vedi lezione: Rappresentazione di funzioni di due variabili nello spazio cartesiano) le funzioni di due variabili si possono rappresentare nello spazio

[r]

Teorema sulla condizione necessaria per l'esistenza di massimi e minimi relativi (dim).. Derivate parziali seconde e matrice hessiana, Teorema

Come per le funzioni ad una sola variabile si definisce DOMINIO DI UNA FUNZIONE A due VARIABILI l'insieme dei valori che possono essere attribuiti alle variabili indipendenti

Vista la definizione di derivata parziale e il suo legame con la nozione di differenziale messa in evidenza precedentemente,. possiamo concludere che le regole di derivazione già

 Formula di Taylor per funzioni Formula di Taylor per funzioni di più