Le direttive del Preprocessore
|
|
|
- Maria Palmieri
- 9 anni fa
- Просмотров:
Транскрипт
1 Le direttive del Preprocessore Prof. Orazio Mirabella Direttive Un compilatore traduce le istruzioni di un programma sorgente in linguaggio macchina Talvolta è conveniente prendere coscienza dell esistenza del compilatore per impartirgli delle direttive. In C è possibile inserire in un codice sorgente tali direttive, dette più propriamente direttive del preprocessore. Il preprocessore è il modulo del compilatore che scandisce per primo il codice sorgente e interpreta le direttive prima della traduzione in codice macchina. Le direttive del preprocessore estendono l ambiente di programmazione del C includendo il compilatore. 1
2 #define #include #error #elif #if #line #else #ifdef #pragma #ifndef #undef Direttive Lo Standard ANSI definisce 12 direttive del preprocessore C #define 1/2 La direttiva #define è usata per associare una sequenza di caratteri a un identificatore. Il preprocessore, nel fare la scansione del codice sorgente, sostituisce a ogni occorrenza dell identificatore la stringa di caratteri che vi è stata associata con la direttiva #define. #define nome-macro sequenza-caratteri Nota: le direttive non sono terminate da ; Es: #define VERO 1 #define FALSO 0 Questa direttiva fa sì che il preprocessore sostituisca a ogni occorrenza del nome VERO il numero 1 e a ogni occorrenza di FALSO il numero 0 printf("%d %d %d", FALSO, VERO, VERO+1); Al compilatore questa istruzione appare come: printf("%d %d %d", 0, 1, 1+1); 2
3 #define 2/2 La sostituzione di macro risparmia al programmatore un lavoro ripetitivo e tedioso. Se per esempio si volesse definire un messaggio di errore standard si potrebbe usare una soluzione del tipo: #define MYERR "standard error on input\n"... printf(myerr); nota: MYERR non è fra doppi apici ed è maiuscolo. Il preprocessore procederebbe fedelmente a sostituire ogni occorrenza di MYERR con la stringa "standard error on input\n". Quindi il compilatore vedrebbe una istruzione del tipo: printf("standard error on input\n"); Nota: non si ha sostituzione di macro se il nome di macro è usato all interno di una stringa: printf( MYERR ); stamperà sul monitor MYERR #include La direttiva #include: consente di includere in un file la copia di un file specificato. Esistono due forme: #include <nome_file> viene utilizzata per includere file di intestazione (header file) della libreria standard, che sono memorizzati in directory standard (dipendenti dall implementazione del compilatore); #include nome_file cerca il file nella directory corrente, altrimenti in directory standard (perciò è utilizzata per includere header file definiti dal programmatore). Es: #include "stdio.h" #include <stdio.h> 3
4 #error Quando il compilatore incontra la direttiva #error visualizza un messaggio di errore. La sintassi di questa direttiva è: #error messaggio-errore Il termine messaggio-errore non è racchiuso tra doppi apici. La direttiva #error è usata per la correzione degli errori (debugging). Direttive condizionali di compilazione alcune porzioni di codice possono essere compilate selettivamente, per esempio, per includere o meno personalizzazioni. Questa funzionalità è usata frequentemente quando si devono fornire diverse versioni di uno stesso programma su piattaforme differenti, per esempio Unix, Windows, Macintosh. Direttive condizionali: #if, #else, #elif ed. Se l espressione costante che segue #if è vera, la porzione di codice compresa tra #if ed viene compilata, altrimenti sarà ignorata dal compilatore Sintassi: #if espressione-costante Nota:L espressione che segue #if, deve contenere identificatori e costanti precedentemente definiti, ma non variabili 4
5 Direttive condizionali di compilazione La direttiva #else ha lo stesso significato di else nelle istruzioni condizionali: stabilisce un alternativa nel caso in cui #if sia valutato falso. Esempio: #include <stdio.h> #define MAX 10 main() { #if MAX>99 printf("compilato per array maggiori di 99\n"); #else printf("compilato per array piccoli\n"); } Direttive condizionali di compilazione La direttiva #elif significa else if ed è usata per stabilire una catena di if-else-if che realizza una compilazione condizionale multipla. Se l espressione è vera, la sequenza di istruzioni è compilata e nessun altra sequenza #elif è valutata; altrimenti si controlla la prossima serie. La forma generale è: #if espressione #elif espressione 1 #elif espressione 2 sequenza istruzione... #elif espressione N 5
6 Direttive condizionali di compilazione Altre due direttive per la compilazione condizionale sono #ifdef, che significa if defined, e #ifndef, che significa if not defined. La sintassi di #ifdef è: #ifdef nome-macro Se il nome-macro è stato precedentemente definito da una #define, allora la sequenza di istruzioni verrà compilata. La sintassi di #ifndef è: #ifndef nome-macro Se il nome-macro non è stato definito da alcuna #define, allora la verrà compilata #undef La direttiva #undef rimuove un nome di macro definito da una precedente #define. La sintassi è: #undef nome-macro Esempio: #define LEN 100 #define WIDTH 100 char array[len][width]; #undef LEN #undef WIDTH /* da questo punto in poi le costanti simboliche LEN e WIDTH non sono più definite */ La direttiva #undef è usata per confinare la definizione di macro in precise porzioni di codice. 6
7 Macro predefinite Lo standard ANSI C specifica cinque macro predefinite: LINE FILE DATE TIME STDC In generale, poi, un compilatore introduce numerose altre macro, specifiche di quella particolare implementazione. LINE corrisponde alla riga corrente. FILE corrisponde al nome del file corrente. DATE è una stringa costruita secondo il formato mese/giorno/anno che riporta la data dell ultima compilazione del codice sorgente. L ora dell ultima compilazione invece è conservata in TIME, stringa che assume la forma ora:minuti:secondi. STDC contiene la costante decimale 1. Ciò significa che l implementazione del compilatore è conforme allo standard. Se invece riporta un qualsiasi altro numero l implementazione non è standard. 7
Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.
Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti
ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.
Sistema C e organizzazione del codice Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto. Un programma C è costituito da un insieme
Preprocessore, linker e libreria standard
Preprocessore, linker e libreria standard Università degli Studi di Brescia Prof. Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 IL PREPROCESSORE Programma sorgente
Compilazione e Makefile
Compilazione e Makefile Indice Il preprocessore Le istruzioni per il preprocessore Le MACRO L ambiente linux: alcuni comandi Editor ed il compilatore gcc I makefile Il comando make I flag Il preprocessore
Linguaggio C: introduzione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi
Introduzione alla programmazione. Alice Pavarani
Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello
#include <stdio.h> main() { - 1 -
Un primo esempio di programma Ogni programma C deve contenere una funzione speciale chiamata main che indica il punto in cui inizia l esecuzione del programma. La funzione main è unica all interno di ogni
Elementi di Base. Introduzione a Python.
Elementi di Base Introduzione a Python http://www.dia.uniroma3.it/~roselli/ [email protected] Credits Materiale a cura del Prof. Franco Milicchio Panoramica Elementi di base della sintassi (struttura,
Linguaggio C Compilazione, linking e preprocessor
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
La sintassi del C APPENDICE H
APPENDICE H La sintassi del C Nella notazione della sintassi utilizzata, le categorie sintattiche (non terminali) sono state indicate da uno stile tipografico in corsivo, mentre le parole letterali e i
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
L AMBIENTE CODE BLOCKS E L IO
L AMBIENTE CODE BLOCKS E L IO Il primo programma #include main() { printf("ciao Mondo!"); } Il file deve essere salvato con estensione.c Il primo programma in C++ #include using
Introduzione al linguaggio C
Introduzione al linguaggio C Abbiamo già visto come un programma non sia altro che un algoritmo codificato in un linguaggio di programmazione. Problema: quale linguaggio scegliere per la codifica di un
Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C
Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C IL LINGUAGGIO C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede tutti i costrutti di controllo dei linguaggi
Espressione di chiamata di funzione
Avvertenza Quanto segue NON è un libro, ma è una copia dei lucidi usati a lezione che NON sostituisce i libri di testo adottati e consigliati per l insegnamento di Informatica Generale. Questa copia è
Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C
Sommario Introduzione... xv Organizzazione del volume... xv Argomenti...xvi Domande...xvi Verifiche...xvi Domande e risposte...xvi Esercizi...xvi Non è richiesta alcuna precedente esperienza di programmazione...
Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi
Obiettivi Unità F1 Primi programmi Conoscere il significato di dichiarazione e definizione di variabili Conoscere i tipi di dato numerici Essere in grado di realizzare semplici algoritmi in pseudolinguaggio
L AMBIENTE CODE BLOCKS E L IO
L AMBIENTE CODE BLOCKS E L IO Il primo programma in C++ #include using namespace std; main() { cout
Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza [email protected] http://www.dis.uniroma1.it/~salza/fondamenti.htm
IL PRIMO PROGRAMMA IN C
IL PRIMO PROGRAMMA IN C LO SCOPO Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video SOLUZIONE
Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal
Algoritmi, Strutture Dati e Programmi : Programmazione in Pascal Prof. Alberto Postiglione AA 2007-2008 Università degli Studi di Salerno Il Linguaggio di Programmazione Pascal Esistono molti linguaggi
Perché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C
Introduzione 2 Introduzione al C Linguaggio di programmazione ad alto livello (HLL) Sviluppato negli anni 70 (C standard ANSI) Molto diffuso e adatto ad un ampio spettro di applicazioni: Scientifiche Gestionali
Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
Linguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
