Il preprocessore. Direttiva define Direttiva include Direttiva if

Documenti analoghi
Linguaggio C: introduzione

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

4 GLI ARRAY E LE STRINGHE

TUTORATO di LINGUAGGI I

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Fondamenti VBA. Che cos è VBA

Unità Didattica 2 I Linguaggi di Programmazione

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Manipolazioni elementari di flussi di testo strutturati

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Diagrammi a blocchi 1

Come utilizzare i riferimenti assoluti e relativi in Microsoft Excel

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Laboratorio di Informatica L-A 1. ne: M se macchina, P se parte Nel caso di macchina seguono: L identificatore

Linguaggio C Compilazione, linking e preprocessor

LA MEMORIA NEL CALCOLATORE

Introduzione alla programmazione. Walter Didimo

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Programmazione ad Oggetti

Il generatore di numeri casuali

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

COSTRUZIONE DI UN APPLICAZIONE

Fortran in pillole : prima parte

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

Definizione di metodi in Java

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Manuale di Aggiornamento BOLLETTINO. Rel B. DATALOG Soluzioni Integrate a 32 Bit

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

La rappresentazione delle informazioni

Introduzione al Linguaggio C ed all IDE DEV-C++

GUIDA RAPIDA EDILCONNECT

Automatizzare le attività con le macro di Visual Basic

Algoritmi. Pagina 1 di 5

Compilazione on-line del Piano di Studio

Files in C++ Fondamenti di Informatica. R. Basili. a.a

Linguaggi di alto livello, compilatori e interpreti

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

Esercitazione 4. Comandi iterativi for, while, do-while

Anno 2. Risoluzione di sistemi di primo grado in due incognite

Corso di Fondamenti di Informatica Classi di istruzioni 2

Array multidimensionali e stringhe

Mini-Corso di Informatica

Uso del pannello operatore

EXCEL: FORMATTAZIONE E FORMULE

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

UTILIZZIAMO GLI OPERATORI MATEMATICI E COMMENTIAMO IL CODICE

Introduzione alle macchine a stati (non definitivo)

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

Procedura operativa per la gestione della funzione di formazione classi prime

Esercizio 1: archivio CD e DVD

Un esempio di if annidati

LEZIONE 4. { x + y + z = 1 x y + 2z = 3

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

La gestione dei caratteri in C

File di script. I File di Script Corso 2D - R.Virili 1

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

AGGIORNAMENTO SOFTWARE

Informatica d ufficio

Gestione delle eccezioni in Java

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

TEOREMA DEL RESTO E REGOLA DI RUFFINI

Progettazione logica

06AZN - Fondamenti di Informatica (GES, LOP, ORG) Esercitazione di laboratorio n. 8 (1/12/09)

La Rappresentazione dell Informazione

Espressioni ed Equazioni

Dispense di Informatica Anno Scolastico 2008/2009 Classe 3APS. Dall'Algoritmo al Programma

COMPILAZIONE. Tarsformazione di linguaggi

Java Native Interface Appunti

Video Scrittura (MS Word) Lezione 2 Tabelle e Immagini

VARIABILI LOCALI E GLOBALI (ESTERNE)

DOCUMENTAZIONE WEB RAIN - ACCESSO CLIENTI

Laboratorio di Architettura degli Elaboratori

Guida a SacramentiWeb 1.2

Il DOS diagramma di flusso. I comandi del DOS. I comandi: vista funzionale. Parametri. Opzioni. I comandi: sintassi

Grafici e Pagina web

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

INTRODUZIONE ALLE BASI DATI RELAZIONALI

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

ANALISI DI SEGNALI TEMPO VARIANTI

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

La programmazione nel linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

Allocazione Dinamica della Memoria

Guida all installazione ed all uso di ASIM

PSC Doc Manuale d uso

Un grafico utilizza i valori contenuti in un foglio di lavoro per creare una rappresentazione grafica delle relazioni esistenti tra loro;

Shift (il tasto del carattere maiuscolo) la parola Standby viene sostituita dalla parola Sospendi Sospendi.

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. Il linguaggio C II

Cifre significative delle misure di grandezze fisiche

Input/output in C e in C++

26.03-ITA. Il metodo Victaulic per tubazioni per accomodare gli sfalsamenti

Traduzione e adattamento a cura di Gylas per Giochi Rari. Versione 1.1 Novembre

Programma per la generazione di filastrocche

Lab. di Sistemi Operativi - Esercitazione - Comandi Shell

Transcript:

Il preprocessore Direttiva define Direttiva include Direttiva if

Il preprocessore Il preprocessore è un processore di testi che elabora il contenuto di un file sorgente prima della compilazione vera e propria. Il preprocessore è un programma che opera sostituzioni tipografiche sul codice sorgente prima che tale codice venga visto dal compilatore vero e proprio. Anche se il lavoro del preprocessore è un operazione formalmente distinta dalla compilazione, il preprocessore fa parte del compilatore e delle specifiche del linguaggio; ogni sorgente C viene sempre preprocessato. Programmazione 2015/16 Il preprocessore 2

Il preprocessore Tutte le righe nel codice sorgente che iniziano con il carattere # sono direttive per il preprocessore Tali direttive permettono, tra le altre cose di: includere (fisicamente) altri file all interno del proprio sorgente ridefinire il significato degli identificatori, tramite sostituzione puramente tipografica nel codice sorgente disabilitare condizionalmente parti di codice in fase di compilazione, eliminando fisicamente il testo prima che il compilatore lo veda Il preprocessore inoltre elimina i commenti dal codice sorgente Programmazione 2015/16 Il preprocessore 3

La direttiva define Viene usata per definire delle macro. Le macro sono utilizzate per sostituire del testo all interno del programma prima della compilazione Dopo una definizione della forma #define nome testo-da-sostituire Tutte le successive occorrenze di nome che non sono racchiuse tra doppi apici sono sostituite da testo-da-sostituire. La stringa di testo testo-da-sostituire va dallo spazio dopo nome fino alla fine della linea può continuare su linee successive se l ultimo carattere della linea è, il quale fa ignorare il carattere di a capo al precompilatore Programmazione 2015/16 Il preprocessore 4

La direttiva define Per esempio, è possibile codificare con delle macro i codici di errore gestiti da un programma: #define ERR_NOERROR 0 #define ERR_INVALID 1 #define ERR_NODATA 2 #define ERR_PERMISSION 3 Per una convenzione universalmente accettata, le costanti definite tramite preprocessore si scrivono in maiuscolo in modo da essere subito riconoscibili leggendo il testo del programma, per non confonderle con le variabili Programmazione 2015/16 Il preprocessore 5

La direttiva define con parametri Le macro vengono spesso usate anche per realizzare piccole pseudo-funzioni, sfruttando la possibilità di passare dei parametri alla macro, ad esempio: #define SQUARE(X) X*X Purtroppo tale prassi si presta ad errori molto subdoli. Nell esempio riportato, l errore simanifesta per esempio in SQUARE(1+2) che diventa 1+2*1+2 cioè 5 invece di 9, come ci si attenderebbe Si consiglia sempre un abbondante uso di parentesi #define SQUARE(X) ((X)*(X)) SQUARE(1+2) diventa ((1+2)*(1+2)) come ci si attende Programmazione 2015/16 Il preprocessore 6

La direttiva define con parametri Quando un argomento di macro appare più di una volta nell espansione, la macro non può essere equivalente ad una funzione perché operatori come ++ appaiono ripetuti nel testo effettivo del programma, con effetti in genere non desiderati SQUARE(i++) diventa ((i++)*(i++)) Programmazione 2015/16 Il preprocessore 7

La direttiva include Il preprocessore sostituisce ogni riga della forma: #include <nome-file> oppure #include nome-file con il contenuto del file nome-file Se il file incluso è specificato con le parentesi ad angolo viene cercato tra quelli di sistema Se è specificato con le virgolette viene cercato prima nella directory corrente Programmazione 2015/16 Il preprocessore 8

La direttiva include Il file incluso può contenere qualunque porzione di codice C, comprese altre direttive #include. In genere contiene direttive #define e dichiarazioni di variabili e funzioni Funzioni, tipi, macro della libreria del C sono definiti in alcuni header file standard es.: math.h stdio.h stdlib.h string.h In generale è buona regola non mettere negli header-file il codice delle funzioni, ma solo la loro dichiarazione Programmazione 2015/16 Il preprocessore 9

La direttiva if Si possono introdurre segmenti di codice in dipendenza da particolari condizioni. Il costrutto seguente valuta una espressione intera costante, il cui valore deve essere noto all atto della compilazione: #if espressione-costante-intera /* * questo codice viene considerato solo se * l espressione risulta diversa da 0 */ /* * endif termina la sezione condizionale */ Tutte le righe di codice comprese tra #if e vengono incluse nel file che verrà passato al compilatore solo se l espressione è diversa da 0 Programmazione 2015/16 Il preprocessore 10

La direttiva if È possibile utilizzare la direttiva #if per eliminare porzioni di codice senza cancellarle, per esempio in fase di debugging: #if 0 /* codice da non considerare */ Una volta eliminati i problemi si può velocemente ripristinare il codice sostituendo 0 con 1 #if 1 /* codice ripristinato */ Programmazione 2015/16 Il preprocessore 11

Le direttive ifdef / ifndef #ifdef MACRO /* * questo codice viene considerato solo se * MACRO è già stata definita */ #ifndef MACRO /* * questo codice viene considerato solo se * MACRO non è già stata definita */ #ifdef MACRO è equivalente a #if defined(macro) Programmazione 2015/16 Il preprocessore 12

La direttiva elif #if CODICE == 1 /* codice 1 */ #else if CODICE == 2 /* codice 2 */ #else if CODICE == 3 /* codice 3 */ Può essere riscritto come #if CODICE == 1 /* codice 1 */ #elif CODICE == 2 /* codice 2 */ #elif CODICE == 3 /* codice 3 */ Programmazione 2015/16 Il preprocessore 13

Esecuzione del precompilatore È possibile definire una (o più) macro al momento della compilazione % gcc -DMACRO file.c Ho definito MACRO % gcc -DMACRO=3 file.c Ho definito MACRO e inizializzata a 3 È possibile eseguire la sola precompilazione Il risultato va sullo standard output % gcc -E -DMACRO=3 -DMACRO2 file.c Programmazione 2015/16 Il preprocessore 14

Esempio di uso del preprocessore Equazione di secondo grado Anno bisestile Programmazione 2015/16 Il preprocessore 15

Esempio di file header Equazione di secondo grado Anno bisestile Programmazione 2015/16 Il preprocessore 16