Linguaggio C Compilazione, linking e preprocessor



Похожие документы
Cenni sull ingegneria del software e sulla qualità dei programmi

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

FONDAMENTI DI MATEMATICA BINARIA

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

FONDAMENTI DI INFORMATICA. Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine. Compressione MPEG

Codifica delle immagini

Linguaggio C. Fondamenti. Struttura di un programma.

Codifica delle immagini

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Gestione della memoria centrale

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Ricerca ed analisi della causa di un problema o guasto di rete

SIP e SDP. Segnalazione nelle reti VoIP. Fulvio Risso. Politecnico di Torino

Wireless monitoring & protection

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Esercizi di Sniffing

Multicast e IGMP. Pietro Nicoletti

Reti logiche e componenti di un elaboratore

Introduzione ai sistemi operativi

ACCESS LIST. Pietro Nicoletti

Interdomain routing. Principi generali e protocolli di routing. Mario Baldi

Domain Name Service. Mario BALDI. Silvano GAI. Fulvio RISSO. staff.polito.it/mario.baldi. sgai[at]cisco.com. fulvio.risso[at]polito.

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo

SAP BusinessObjects Versione del documento: Manuale di installazione di Dashboards LiveCycle Data Services Gateway

Il protocollo VTP della Cisco

Introduzione a Dev-C++

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

LINGUAGGI DI PROGRAMMAZIONE

Transparent bridging

ARP e RARP. Silvano GAI. sgai[at]cisco.com. Mario BALDI. mario.baldi[at]polito.it Fulvio RISSO

Codifica: dal diagramma a blocchi al linguaggio C++

ToolChain: Come Generare Applicazioni in Linguaggio Macchina

Nota di Copyright. 09_Prog_dorsale_fibra - 2 Copyright M. Baldi - P. Nicoletti: see page 2

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Autenticazione tramite IEEE 802.1x

SOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software:

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Progettazione di reti locali basate su switch - Switched LAN

Protezione. Protezione. Protezione. Obiettivi della protezione

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Alcune regole di base per scrivere un programma in linguaggio C

Software di base. Corso di Fondamenti di Informatica

Introduzione alla programmazione in C

LO STANDARD EIA/TIA 569

Librerie. Laboratorio di Informatica Antonio Monteleone 28

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Sistema operativo: Gestione della memoria

INFORMATICA 1 L. Mezzalira

Il Software e Il Sistema Operativo. Prof. Francesco Accarino IIS Altiero Spinelli A.S. 09/10

Reti di computer. Materiale estratto da:

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Traduzione ed esecuzione di programmi. Dispensa 08

Tipi di errori e possibili cause sulle reti Ethernet

Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009. Prof. Raffaele Nicolussi

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Linguaggio C - Stringhe

SMDS: Switched Multi-Megabit Data Service. Silvano GAI

Corso di Informatica

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Funzioni in C. Violetta Lonati

SNMP e RMON. Pietro Nicoletti Studio Reti s.a.s. Mario Baldi Politecnico di Torino. SNMP-RMON - 1 P. Nicoletti: si veda nota a pag.

FONDAMENTI di INFORMATICA L. Mezzalira

Il computer: primi elementi

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

NozionidiBase di Informatica

Lezione 10: Librerie e compilazione separata

Unbundling e xdsl. Mario Baldi

Gestione dei File in C


Corso di Informatica

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

IL SOFTWARE. Giada Agostinacchio Classe 2^ Beat ISIS G.Meroni Lissone Anno Scolastico 2007/2008

Funzioni. Il modello console. Interfaccia in modalità console

ICMP. Internet Control Message Protocol. Silvano GAI. sgai[at]cisco.com. Mario BALDI. mario.baldi[at]polito.it

Software. Algoritmo. Algoritmo INFORMATICA PER LE DISCIPLINE UMANISTICHE 2 (13042)

Voce su IP e Telefonia su IP

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

IGRP Interior Gateway Routing Protocol

IP Multicast. Mario Baldi staff.polito.it/mario.baldi. Silvano Gai Nota di Copyright. Comunicazioni di gruppo

Architetture Applicative

Header. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Linguaggi di Programmazione

Транскрипт:

FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C Compilazione, linking e preprocessor 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1

Nota di Copyright Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine. Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione. Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori. L informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell informazione). In ogni caso non può essere dichiarata conformità all informazione contenuta in queste slide. In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali. 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2

Programma sorgente, compilatore, file oggetto, file eseguibile programma sorgente (uno o più file ASCII)... librerie (simili ai file oggetto)... compilatore... file oggetto (binari) linker file eseguibile (binario) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3

Compilazione Il C è un linguaggio di alto livello: la descrizione dei comandi da eseguire è molto astratta, se confrontata con il linguaggio macchina o l assembler Il C è un linguaggio compilato: un programma, detto compilatore, traduce uno o più file ASCII contenenti i comandi in C in un unico file con la sequenza di istruzioni in codice macchina A differenza dei linguaggi interpretati, la traduzione avviene una volta per tutte, e non a runtime Il C è un linguaggio portabile: a partire da un unico file sorgente, è possibile generare programmi eseguibili per architetture hardware diverse 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4

Compilazione programma sorgente (uno o più file ASCII)... Compilatore UNIX Compilatore Win32 File oggetto (binari) File oggetto (binari) Librerie UNIX Linker UNIX Linker Win32 Librerie Win32 file eseguibile per UNIX file eseguibile per Win32 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5

Portabilità La portabilità del codice deriva dal fatto che i linguaggi di alto livello sono standardizzati Il linguaggio C, nella versione standard ANSI, consente di scrivere programmi portabili sulla maggioranza delle architetture hardware esistenti Sono disponibili compilatori e ambienti di sviluppo C (IDE: Integrated Development Environment) per tutte le piattaforme software (DOS/Win32, UNIX, Linux, MacOS, VMS, Solaris ) La dipendenza dal sistema operativo è tuttavia sensibile nelle procedure di basso livello (chiamate di sistema, I/O su dispositivi periferici...) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6

Linking Il compilatore genera una traduzione in uno o più file oggetto, privi dei comandi di interfacciamento con l hardware e il sistema operativo Tali comandi sono disponibili in formato eseguibile nelle librerie di sistema: queste contengono parti di programma di uso comune, disponibili già compilate Il collegamento tra i file oggetto e i file di libreria da essi richiesti viene effettuato dal linker Il linker genera un file eseguibile contenente le parti di codice macchina copiate dalle librerie (linking statico), oppure dei collegamenti dinamici alle librerie necessarie (linking dinamico, es. le DLL in Win32) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7

Il preprocessor Prima della compilazione vera e propria, ogni sorgente C viene analizzato dal preprocessor Il preprocessor interpreta ed esegue tutti i comandi (o direttive) corrispondenti alle righe di codice introdotte dal carattere # Le funzionalità del preprocessor sono: inclusione di file (direttive #include) sostituzione delle macro (direttive #define) macro dotate di argomenti compilazione condizionale 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8

Inclusione di file Ogni linea di codice della forma #include <nomefile> viene sostituita con il contenuto del file nomefile Se il nome del file è racchiuso tra apici, #include "nomefile" la ricerca del file avviene nella stessa directory in cui è presente il file sorgente Nel caso di una direttiva #include <nomefile>, la ricerca del file da includere avviene in genere nel direttorio in cui risiedono gli header file delle librerie 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9

Inclusione di file Le direttive di inclusione più frequenti sono quelle relative agli header file delle librerie La direttiva #include <stdio.h> consente di includere nel file sorgente tutti i prototipi di funzione e i tipi di dati dichiarati nell header file stdio.h L inclusione permette anche di raggruppare in un file unico tutte le dichiarazioni relative a programmi complessi e/o distribuiti su più file sorgenti Coerenza nelle dichiarazioni e definizioni delle variabili 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10

/* pippo.h */ #define PIGRECO 3.14 int funzione_1 (void);... /* pippo1.c */ #include <stdio.h> #include "pippo.h" float x; int main() { int k = funzione_1(); x = PIGRECO; /* pippo2.c */ #include <stdio.h> #include "pippo.h" extern float x; int funzione_1(void) { float y = 2 * PIGRECO; x = y + 4; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 11

Sostituzione delle macro Una definizione della forma #define nome testo_da_sostituire è la sostituzione di macro più semplice Tutte le successive occorrenze di nome vengono sostituite con testo_da_sostituire Lo scope (visibilità) della sostituzione va dal punto in cui compare la direttiva fino alla fine del file sorgente Qualsiasi nome può essere sostituito con qualsiasi testo: #define forever for ( ; ; ) #define PIGRECO 3.14 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 12

Macro dotate di argomenti Una sostituzione più complessa può essere #define max(a, B) ((A) > (B)? (A) : (B)) max è una macro dotata di argomenti, anche se assomiglia a una chiamata di funzione In tale caso, ogni occorrenza di un parametro formale viene rimpiazzata con il corrispondente parametro reale Pertanto nel file sorgente la linea: x = max(p+q, r+s); viene espansa nel codice x = ((p+q) > (r+s)? (p+q) : (r+s)); 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13

Sostituzione delle macro Le sostituzioni avvengono soltanto sui token I parametri formali all interno di stringhe tra apici non vengono sostituiti Quindi se YES è un nome definito da #define YES 1 la sua occorrenza in printf ("YES"); resta inalterata 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14

Sostituzione delle macro La definizione di un nome può essere annullata con la direttiva #undef #undef può essere utile per assicurarsi che una funzione sia definita come tale, e non come una macro Ad esempio: #undef getchar... int getchar (void) { } garantisce che nel sorgente non vi sia alcuna macro dal nome getchar, in quanto getchar è già il nome di una funzione di libreria 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15

Macro Una macro è dunque una forma compatta in grado di rappresentare espressioni complesse o insiemi di istruzioni mediante parametri Le macro più semplici sono prive di parametri, e si usano per definire costanti simboliche Le macro dotate di parametri possono talvolta evitare la creazione di funzioni, specie quelle soggette a frequenti chiamate durante l esecuzione Alcune funzioni di libreria vengono implementate con delle macro, per velocizzare l esecuzione dei programmi più complessi 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16

Compilazione condizionale Alcune direttive consentono il controllo dell attività di preprocessing E possibile inserire o eliminare segmenti di codice in modo selettivo, in base al valore di determinate condizioni durante la compilazione La direttiva #if valuta un espressione costante intera: se questa è 0, le linee di codice tra #if e il successivo #endif vengono incluse nella compilazione #define VERBOSE 1 #if VERBOSE #endif <blocco di codice> 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 17

Compilazione condizionale Costrutti condizionali più articolati, del tipo if then else, si ottengono con le direttive #if, #else e #elif In un sorgente portabile su più piattaforme software è frequente trovare istruzioni del tipo: #define SYSTEM <nome_del_sistema_operativo> #if SYSTEM == UNIX #define HEADER "unix.h" #elif SYSTEM == MSDOS #define HEADER "msdos.h" #else #define HEADER == "default.h" #endif 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 18

Compilazione condizionale Le direttive #ifdef e #ifndef controllano se un particolare nome è già stato definito #ifdef DEBUG <istruzioni di debug: stampa di variabili...> #endif #ifndef HEADER #define HEADER "default.h" #endif 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 19