Esercitazione Visibilità di variabili e funzioni

47
Esercitazione Visibilità di variabili e funzioni Calcolatori elettronici II Prof. A. Mazzeo Dott. Sara Romano

description

Esercitazione Visibilità di variabili e funzioni. Calcolatori elettronici II Prof. A. Mazzeo Dott. Sara Romano. Il linguaggio C. E’ un linguaggio di programmazione che segue il paradigma della programmazione imperativa; - PowerPoint PPT Presentation

Transcript of Esercitazione Visibilità di variabili e funzioni

Page 1: Esercitazione Visibilità di variabili e funzioni

EsercitazioneVisibilità di variabili e funzioni

Calcolatori elettronici IIProf. A. Mazzeo

Dott. Sara Romano

Page 2: Esercitazione Visibilità di variabili e funzioni

Il linguaggio C• E’ un linguaggio di programmazione che segue il

paradigma della programmazione imperativa;• Svolge le operazioni in modo sequenziale

(esecuzione delle istruzioni dall'alto verso il basso);• E’ un linguaggio a medio livello (è considerato il

linguaggio di più basso livello tra quelli di alto livello);

• E’ ampiamente utilizzato per programmare driver, sistemi operativi o comunque applicazioni che richiedono un controllo diretto sulle periferiche.

Wikibooks http://it.wikibooks.org/wiki/C

Page 3: Esercitazione Visibilità di variabili e funzioni

I programmi C• Il linguaggio C utilizza i file come contenitori di

programmi;• Un programma C è costituito da un insieme di “oggetti”

che possono appartenere a due categorie distinte:– Funzioni;– Variabili.

• A questi oggetti viene assegnato un nome nel punto in cui vengono definiti nel programma;

• Il modo in cui i nomi sono usati per accedere a tali elementi (visibilità) da un determinato punto nel programma è disciplinato da regole (linkage).

http://publications.gbdirect.co.uk/c_book

Page 4: Esercitazione Visibilità di variabili e funzioni

Le funzioni

• Le funzioni sono i moduli di programma;• Sono sempre esterne, non possono

essere definite all’interno di altre funzioni;• Il main è una funzione speciale:

– Deve essere unica all’interno del programma;– È la funzione che viene eseguita all’avvio del

programma.

Page 5: Esercitazione Visibilità di variabili e funzioni

Struttura dei programmi C

Struttura generale di un programma C

Page 6: Esercitazione Visibilità di variabili e funzioni

Compilazione• La compilazione di un programma C si compone in due fasi:

traduzione in codice oggetto e produzione dell’eseguibile.

Page 7: Esercitazione Visibilità di variabili e funzioni

Il linker

• Il linker raccoglie i file-oggetto e crea il file eseguibile;

• Per fare questo ha bisogno di collegare i riferimenti incrociati a simboli di variabili e funzioni.

• Esempio: se nel file File1.o si fa riferimento alla funzione f() dichiarata nel file File2.o, nel programma risultante tale riferimento deve essere risolto con degli indirizzi appropriati.

Page 8: Esercitazione Visibilità di variabili e funzioni

Visibilità degli oggetti

• Gli oggetti in C possono essere:– Interni– Esterni

• La distinzione tra i due ha a che fare con le funzioni: ogni oggetto dichiarato esternamente alla funzione viene detto esterno, altrimenti viene detto interno.

• Le funzioni sono tutte esterne (nessuna funzione può essere dichiarata all’interno di un’altra funzione).

Page 9: Esercitazione Visibilità di variabili e funzioni

Linkage

• L’accessibilità degli oggetti (tra diversi file o all’interno dello stesso file) viene definita come linkage.

• Tre tipi possibili:– External linkage;– Internal linkage;– No linkage.

• Gli argomenti e le variabili interne alle funzioni sono prive di linkage

Page 10: Esercitazione Visibilità di variabili e funzioni

Campo di azione nel file sorgente

• Il file sorgente, che si ottiene dalla compilazione, è suddiviso in componenti costituite essenzialmente dalla dichiarazione di variabili e di funzioni (prototipi inclusi).

• L'ordine in cui appaiono queste componenti determina la visibilità reciproca (si può accedere solo a quello che è già stato dichiarato).

Page 11: Esercitazione Visibilità di variabili e funzioni

External linkage

• Gli oggetti con external linkage sono al livello più esterno del programma. Questo tipo di linkage si applica alle funzioni e a tutto ciò che viene dichiarato all’esterno delle funzioni.

• Tutte le istanze con un nome che hanno external linkage si riferiscono allo stesso oggetto nel programma.

Page 12: Esercitazione Visibilità di variabili e funzioni

Internal linkage

• Questo tipo di linkage viene utilizzato per dichiarare oggetti visibili solo all’interno del file dove sono dichiarati e non nell’intero programma.

• I nomi con internal linkage si riferiscono soltanto all’oggetto all’interno del file sorgente.

Page 13: Esercitazione Visibilità di variabili e funzioni

Variabili locali• Parola chiave auto o nessuna dichiarazione;• Sono interne ad un blocco individuato da {…} (es:

interne ad una funzione);• Scope (ambito di visibilità):

– visibili (accessibili) solo all’interno del blocco di definizione;

• Ciclo di vita:– create al momento della dichiarazione, cessano di esistere

quando si esce dal blocco;

• Sono inizializzate con valori casuali.• Non mantengono il valore tra due riferimenti successivi a

meno che non si usa la keyword static.

Page 14: Esercitazione Visibilità di variabili e funzioni

Esempio di variabili locali

#include <stdio.h>

void main(void) {int i, j;…funz();

}void funz() {

int i;static int j;

}

i e j sono variabili automatiche, ovvero locali alla funzione main e funz. Sono create al momento della dichiarazione e cessano di esistere quando si esce dal blocco.

variabile locale che conserva il suo valore fra l’uscita e il successivo rientro nella funzione in cui è stata dichiarata

Page 15: Esercitazione Visibilità di variabili e funzioni

Variabili esterne (globali)• Sono dichiarate una sola volta esternamente a qualsiasi blocco;• Devono essere rese note alle funzioni o ad altri moduli tramite la

parola chiave extern (eccetto il caso in cui la dichiarazione preceda la funzione o il blocco in uno stesso modulo (es: all’inizio di un modulo, come avviene nella pratica)).

• Scope (ambito di visibilità):– Se rese note ad un blocco con l’uso di extern: ovunque nel programma;– Se rese note ad un blocco senza l’uso di extern: ovunque, nello stesso

modulo, a partire dalla loro dichiarazione in avanti;• Ciclo di vita:

– Esistono e conservano il loro valore ovunque siano visibili all’interno del programma (es: uscita e successivo rientro da funzioni o blocchi);

Page 16: Esercitazione Visibilità di variabili e funzioni

Esempio: unico file#include <stdio.h>int i, j;

void main(void) {extern int i, j; int x;i = 2;j = 3;x = i + j;

}

Variabili globali.

In questo caso la dichiarazione può essere omessa

Page 17: Esercitazione Visibilità di variabili e funzioni

Esempio: diversi file....main() {...} int a=0;extern int b;extern double f3(...)

{...}  int f1(...) {...}float f2(...) {...}

....int b=0;static int k=1;double f3(...) {...}  

File1.c File2.c

La funzione main non ha visibilità degli oggetti a, b, f1, f2 e f3. L’oggetto a è visto e riferibile da f1 e f2. La variabile b, k e la funzione f3 sono definite nel file2.c La variabile k è “privata” per il file2.c nel senso che è globale per i soli moduli del file in cui è dichiarata.

Page 18: Esercitazione Visibilità di variabili e funzioni

Dichiarazione e definizione• Dichiarazione di una variabile: rende note le proprietà di

tale oggetto (principalmente il suo tipo);• Definizione di una variabile: rende note le proprietà e

provoca l’allocazione di un’area di memoria riservata a quella variabile. Tra tutti i file che costituiscono il programma, uno solo deve contenere la definizione di una variabile esterna.

int i;float j;

funz(..) {...}

extern int i;extern float j;

funz3(..) {...}

Definizione di i e j Dichiarazione di i e j

Page 19: Esercitazione Visibilità di variabili e funzioni

Esercitazione

• ARM Project Manager

Page 20: Esercitazione Visibilità di variabili e funzioni

Creazione codice sorgente

Page 21: Esercitazione Visibilità di variabili e funzioni

File C di esempioint c=16;static int d=15;int sommaNumeri (int a, int b){static int x;x=12;return a+b;

}

int a = 3;int b = 5;extern int c;extern int d;extern int sommaNumeri(int,int);

int main(void) {int risultato;risultato=sommaNumeri(a,b);return 0;

} Scope.c Scope2.c

Page 22: Esercitazione Visibilità di variabili e funzioni

Salvataggio del codice sorgente

Page 23: Esercitazione Visibilità di variabili e funzioni

Creazione progetto

Page 24: Esercitazione Visibilità di variabili e funzioni

Aggiungere i file al progetto

Page 25: Esercitazione Visibilità di variabili e funzioni

Opzione compilatore

Page 26: Esercitazione Visibilità di variabili e funzioni

Build project

Page 27: Esercitazione Visibilità di variabili e funzioni

File del progetto

Page 28: Esercitazione Visibilità di variabili e funzioni

Scope.c

int a = 3;int b = 5;extern int c;extern int d;int sommaNumeri (int, int);int main(void) {int risultato;risultato=sommaNumeri(a,b);return 0;

}

Page 29: Esercitazione Visibilità di variabili e funzioni

Scope.s

Inizializzazione a=3 e b=5

A e b sono variabili globali e possono essere utilizzate da altri object file

Page 30: Esercitazione Visibilità di variabili e funzioni

IMPORT / EXPORT• IMPORT symbol• La direttiva IMPORT fornisce un collegamento

tra l’oggetto etichettato con symbol (che è definito in un object file separato) e l’object file in cui vi è tale direttiva. Il collegamento viene risolto dal linker.

• EXPORT symbol• La direttiva EXPORT dichiara che l’oggetto

etichettato con symbol può essere utilizzato a link time da altri object file.

Page 31: Esercitazione Visibilità di variabili e funzioni

Scope2.cint c=16;static int d = 15;int sommaNumeri (int a, int b){int static x;x=12;return a+b;

}

Page 32: Esercitazione Visibilità di variabili e funzioni

Scope2.s

Inizializzazione c=16 e d=15

c è globale mentre d è statica

Page 33: Esercitazione Visibilità di variabili e funzioni

Esecuzione con il Debug

Page 34: Esercitazione Visibilità di variabili e funzioni

Indirizzo base dell’area dati

Page 35: Esercitazione Visibilità di variabili e funzioni
Page 36: Esercitazione Visibilità di variabili e funzioni
Page 37: Esercitazione Visibilità di variabili e funzioni
Page 38: Esercitazione Visibilità di variabili e funzioni
Page 39: Esercitazione Visibilità di variabili e funzioni
Page 40: Esercitazione Visibilità di variabili e funzioni
Page 41: Esercitazione Visibilità di variabili e funzioni
Page 42: Esercitazione Visibilità di variabili e funzioni

Esempio variabili localiint a = 3;extern int c;extern int d;int sommaNumeri (int, int);int main(void) {int b = 5;int risultato;risultato=sommaNumeri(a,b);return 0;

}Scope.c

Page 43: Esercitazione Visibilità di variabili e funzioni
Page 44: Esercitazione Visibilità di variabili e funzioni
Page 45: Esercitazione Visibilità di variabili e funzioni
Page 46: Esercitazione Visibilità di variabili e funzioni

Esempio: se utilizzo d? int a = 3;int b = 5;extern int c;extern int d;int sommaNumeri (int, int);int main(void) {int risultato;risultato=sommaNumeri(a,d);return 0;

}

int c=16;static int d = 15;

int sommaNumeri (int a, int b){int static x;x=12;return a+b;

}

Scope.c

Scope2.c

Page 47: Esercitazione Visibilità di variabili e funzioni