Programmazione modulare nel linguaggio C

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

INFORMATICA Algoritmi fondamentali
Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Una applicazione complessa non può essere sviluppata in un unico file: sarebbe ingestibile! Deve necessariamente essere strutturata su più file sorgente.
Introduzione al linguaggio C
Code::Blocks Ambiente di sviluppo.
I linguaggi di programmazione
Marco Barisione Estendere Python in C.
Type Checking (1° parte)
Massa Laura Mela Enrica
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
1 Classi di memorizzazione. 2 Definiscono le regole di visibilità delle variabili e delle funzioni quando il programma è diviso su più file Stabiliscono.
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Introduzione al linguaggio C
Dr. Francesco Fabozzi Corso di Informatica
DLL: Dynamic Linking Library
Anno accademico Le classi di memorizzazione.
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
TRADUZIONE DEL PROGRAMMA Una volta che un programma sia stato scritto in C, esso non può essere eseguito senza unulteriore traduzione. Ciò perché qualsiasi.
PROGRAMMI DI RICERCA E ORDINAMENTO
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Informatica (Programmazione)
Approfondimento delle classi
Unità Didattica 2 I Linguaggi di Programmazione
memoria gestita staticamente:
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Le funzioni.
Espressioni condizionali
Alberi di ricerca binari
Algoritmi e Programmazione Avanzata
Algoritmi e Programmazione Avanzata
Programmazione Avanzata
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Java Contardi Carlo A.S. 2008/09.
Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
void binario(int n); …………………
Programmazione di Calcolatori
AWK Salvatore Campagna
INTERFACCIAMENTO ASSEMBLY - C++
Unità Didattica 3 Linguaggio C
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
1 Applet ed HTML Fondamenti di Informatica Corso D.
Unità Didattica 1 Linguaggio C
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Introduzione al C Davide Gadia.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Programmazione in linguaggio C
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Introduzione Laboratorio di Calcolo Corso di Laurea in Fisica Università degli Studi di Roma “La Sapienza”
Scrivere e compilare programmi
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
Compilazione separata
Il linguaggio C Un primo programma C : un primo programma (2) /* Programma che calcola il massimo fra tre numeri inseriti da tastiera */ #include #define.
Concetti Fondamentali sulla Programmazione
Copyright © Istituto Italiano Edizioni Atlas
Laboratorio di Linguaggi lezione XI Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Transcript della presentazione:

Programmazione modulare nel linguaggio C Algoritmi e Programmazione Avanzata Programmazione modulare nel linguaggio C Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Programmazione modulare in C

Introduzione Non è possibile creare programmi di elevata complessità lavorando con un unico file sorgente Lentezza di ricompilazione Difficile riuso di procedure Impossibile collaborare tra più programmatori Difficile tener traccia delle modifiche Occorre realizzare programmi distribuiti su più file sorgenti. A.A. 2002/2003 APA-extern

Compilazione e Link Sorgente C Sorgente C Sorgente C Sorgente Assembler .c Compilatore Compilatore Compilatore Assemblatore Codice oggetto Codice oggetto Codice oggetto Codice oggetto .obj Linker .lib Codice eseguibile Libreria Libreria .exe A.A. 2002/2003 APA-extern

Struttura del compilatore Sorgente C Analisi lessicale Analisi sintattica Analisi semantica Generazione codice indipendente HW Ottimizzazione Generazione codice binario Codice oggetto Ottimizzazione A.A. 2002/2003 APA-extern

Modulo di Codice oggetto Contiene il codice binario corrispondente ad un modulo C Contiene dei riferimenti esterni a funzioni e variabili dichiarate in altri moduli Contiene funzioni e variabili utilizzabili da altri moduli Uno ed un solo modulo contiene main(). A.A. 2002/2003 APA-extern

Modulo oggetto sort.c Funzioni usate dal modulo ma definite altrove Funzioni definite nel modulo, richiamabili anche dall’esterno sort.obj strcmp inssort strcpy cntsort Codice binario stdout scambi Variabili definite nel modulo, utilizzabili anche dall’esterno Variabili usate dal modulo ma definite altrove A.A. 2002/2003 APA-extern

Linker Codice oggetto Codice oggetto Codice oggetto Codice oggetto Codice eseguibile Codice binario A.A. 2002/2003 APA-extern

Modularità Ciascun modulo in C: Definisce alcune funzioni “private” Definisce alcune funzioni “pubbliche” Definisce alcune variabili “private” Definisce alcune variabili “pubbliche” Chiama alcune funzioni “esterne” Usa alcune variabili “esterne”. A.A. 2002/2003 APA-extern

Chiamata di funzioni (I) void InsertionSort(int A[], int n) ; void InsertionSort(int A[], int n) { int i, j, key ; /* … */ extern void InsertionSort(int A[], int n) ; /* … */ main() { int v[10] ; InsertionSort(v, 10) ; A.A. 2002/2003 APA-extern

Chiamata di funzioni (II) Il modulo che esporta una funzione non deve fare nulla di particolare: in C, tutte le funzioni sono pubbliche (per default) Il modulo che utilizza la funzione deve dichiararne il prototipo (con la parola chiave extern) Il linker farà il collegamento. A.A. 2002/2003 APA-extern

Funzioni private Nel caso in cui un modulo definisca delle funzioni che NON vuole esportare, nella definizione (non nel prototipo) deve comparire la parola chiave static. void InsertionSort(int A[], int n) ; void CancellaVettore(int A[], int n) ; void InsertionSort(int A[], int n) { . . . } static void CancellaVettore(int A[], int n) A.A. 2002/2003 APA-extern

Variabili globali (I) int n_elem ; double vett[MAX] ; static int temp ; extern int n_elem ; extern double vett[MAX] ; /* … */ { for(i=0; i<n_elem; ++i) vett[i]++ ; A.A. 2002/2003 APA-extern

Variabili globali (II) Il modulo che esporta una variabile globale non deve fare nulla di particolare: in C, tutte le variabili globali sono pubbliche (per default) Il modulo che utilizza la variabile deve ri-definirla con la parola chiave extern Se non si vuole esportare una variabile occorre definirla con la parola chiave static Le variabili locali (alle procedure) non possono essere condivise. A.A. 2002/2003 APA-extern

Riassunto: funzioni int f( int x ) ; int f(int x) { . . . } { . . . y = f ( z ) ; . . .} static int f(int x) A.A. 2002/2003 APA-extern

Riassunto: variabili int x ; { . . . x = 18 ; . . .} extern int x ; static int x ; A.A. 2002/2003 APA-extern

Problemi Le due dichiarazioni (nel modulo che esporta e nei moduli che usano la funzione/variabile) devono coincidere al 100% int f( int x ) ; int f(int x) { . . . } int f( double x ) ; { . . . y = f ( z ) ; . . .} Errore! A.A. 2002/2003 APA-extern

Il ruolo degli header file Si possono utilizzare degli header file (file .h) per raccogliere le definizioni “extern” di funzioni e variabili pubbliche Il creatore del modulo che esporta le funzioni o variabili crea un file .h Tutti i moduli che usano tali risorse esportate includono i file .h (#include). A.A. 2002/2003 APA-extern

Esempio di header file (I) void InsertionSort(int A[], int n) ; extern int n_elem ; extern double vett[MAX] ; sort.h sort.c #include "sort.h" /* per controllo coerenza */ int n_elem ; double vett[MAX] ; static int temp ; void InsertionSort(int A[], int n) { . . . } static void CancellaVettore(int A[], int n) ; A.A. 2002/2003 APA-extern

Esempio di header file (II) void InsertionSort(int A[], int n) ; extern int n_elem ; extern double vett[MAX] ; sort.h altro.c #include "sort.h" /* per importare dichiarazioni */ main() { int v[10] ; /* … */ InsertionSort(v, 10) ; for(i=0; i<n_elem; ++i) vett[i]++ ; A.A. 2002/2003 APA-extern

Note Ciascun modulo solitamente esporta alcune funzioni o variabili, e ne importa altre È sempre bene che ciascun modulo includa anche il proprio header file Conviene limitare al minimo il numero di variabili condivise Includere anche le #define nei file .h Gruppi di moduli correlati tra loro possono condividere un solo file .h. A.A. 2002/2003 APA-extern