Preprocessore, linker e libreria standard

Похожие документы
Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Primi passi col linguaggio C

STRUTTURA DI UN PROGRAMMA

Le direttive del Preprocessore

Linguaggi di alto livello, compilatori e interpreti

Linguaggio C: Introduzione ad ambienti di sviluppo integrati (IDE) e a Dev-C++ Università degli Studi di Brescia

Compilazione separata. Come realizzare correttamente un piccolo progetto su piu' file

Il linguaggio C. Notate che...

Linguaggio C Compilazione, linking e preprocessor

Linguaggio C. Fondamenti. Struttura di un programma.

Istituto Tecnico Industriale M. M. Milano Polistena. Classe III D a.s. 2015/2016 C++ Guida Base

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Linguaggio C: introduzione

Il generatore di numeri casuali

Linguaggio C: le funzioni

Lezione 10: Librerie e compilazione separata

Programmazione modulare

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

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

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

Variabili. Tipi di dati di base. Variabili. Variabili

La sintassi del C APPENDICE H

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

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

Lab 01 Introduzione a Codelite

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

IL PRIMO PROGRAMMA IN C

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

ESEMPIO: le variabili LETTURA/SCRITTURA DI VARIABILI. Specifica Leggere da tastiera un intero, un carattere, un float e un double. Stamparli a video.

COMPILAZIONE. Tarsformazione di linguaggi

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Linguaggio C - sezione dichiarativa: costanti e variabili

perror: individuare l errore quando una system call restituisce -1

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

Definizione di metodi in Java

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

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo

Funzioni. Corso di Fondamenti di Informatica

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

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Ambienti di sviluppo integrato

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

Appunti, esempi ed esercizi sui linguaggi C/C++

LINGUAGGI DI ALTO LIVELLO

Java Native Interface Appunti

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

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri

Primi programmi in C

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Il compilatore Dev-C++

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

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Librerie. Laboratorio di Informatica Antonio Monteleone 28

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

Informatica I Facoltà di Ingegneria Prova scritta del 20/01/2014 TURNO A

INFORMATICA E PROGRAMMAZIONE PROF. M. GIACOMIN ESPERIENZA IN AULA: ELABORAZIONE DI IMMAGINI A COLORI IN LINGUAGGIO C

linguaggio di programmazione e programma

Linguaggio C La libreria standard

Espressioni ed operatori

Uso di metodi statici. Walter Didimo

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

5. Codifica degli Algoritmi in C

NOZIONI BASE PER ESERCITAZIONI

Indice. Introduzione PARTE PRIMA LE BASI DEL C++: IL LINGUAGGIO C 1

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Транскрипт:

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 Preprocessore Programma sorgente modificato Compilatore Programma eseguibile Linguaggio C Linguaggio C Linguaggio macchina Finora abbiamo trascurato il ruolo del preprocessore Esegue le direttive del preprocessore, rimuovendole - hanno la forma #direttiva - non sono seguite da punto e virgola Rimuove i commenti (in alcuni casi anche spazi inutili) Pura manipolazione testuale (no compilazione) Elementi di Informatica e Programmazione Università di Brescia 2

PRINCIPALI DIRETTIVE DEL PREPROCESSORE Definizione di macro - identificatori che vengono trasformati in un testo definito Inclusione di file - molto utile nel caso di programmi strutturati su più file Compilazione condizionale - parti di programma C che possono essere compilate in modo condizionato (es: in alternativa) sulla base delle macro definite - non esaminate qui (per gli appassionati: vedi appendice) NB: le direttive possono essere poste ovunque nel file Elementi di Informatica e Programmazione Università di Brescia 3

Definizione di macro (1) Macro semplici #define identificatore testo-di-sostituzione Esempio #define ITERAZIONI 200 //numero di iterazioni void main(){ for(i=1; i<=iterazioni; i++){ } Vantaggi Modificabilità + Leggibilità Elementi di Informatica e Programmazione Università di Brescia 4

Definizione di macro (2) Macro parametriche IMP: no spazio! #define identificatore(x1, x2,,xn) testo-di-sostituzione Esempio #define PRINT_INT(n) printf( %d\n, n) void main(){ PRINT_INT(i*j); } Elementi di Informatica e Programmazione Università di Brescia 5

Inclusione di file Direttiva #include: #include <nomefile> #include nomefile Nella prima forma, il file viene ricercato in una directory predefinita Nella seconda, il file viene cercato prima nella directory corrente, poi nella directory predefinita NB: vediamo un utilizzo comune Elementi di Informatica e Programmazione Università di Brescia 6

PROGRAMMI SU PIU FILE Tipicamente i programmi di grandi dimensioni sono suddivisi in più file sorgente, p.es. - un file contenente funzioni per calcoli matematici - un file contenente il main che utilizza queste funzioni Il compilatore consente la compilazione separata di ciascun file sorgente, ottenendo un modulo oggetto I diversi moduli oggetto possono essere collegati mediante un programma detto linker Elementi di Informatica e Programmazione Università di Brescia 7

COMPILAZIONE SEPARATA programma sorgente matematica.c preprocessore + compilatore Modulo oggetto matematica.o programma sorgente main.c preprocessore + compilatore Modulo oggetto main.o I moduli oggetto contengono codice in linguaggio binario non direttamente eseguibile (cf. riferimenti esterni) + informazioni supplementari Elementi di Informatica e Programmazione Università di Brescia 8

IL LINKER modulo oggetto modulo oggetto modulo oggetto linker modulo eseguibile Il linker si occupa di ritrovare e collegare opportunamente i moduli oggetto producendo un unico modulo eseguibile pronto per il caricamento in memoria e l esecuzione Elementi di Informatica e Programmazione Università di Brescia 9

Problema: come gestire le funzioni nei diversi moduli sorgenti Il file contenente le chiamate a funzioni esterne (main.c) deve includere i prototipi delle funzioni chiamate! Scriverli in ogni programma che usa la libreria è dispendioso (oltre che fonte di errori!!!) int main(){ } y=radicequadrata(7); main.c float radicequadrata(float x){ } matematica.c Elementi di Informatica e Programmazione Università di Brescia 10

float radicequadrata(float); float logaritmo(float base, float n); matematica.h #include matematica.h int main(){ } y=radicequadrata(7); main.c #include matematica.h float radicequadrata(float x){ } matematica.c Elementi di Informatica e Programmazione Università di Brescia 11

Come fare concretamente? Produrre i file sorgente ed i file header (.h) nella stessa directory Per compilare i sorgenti producendo moduli oggetto: usare l opzione c del compilatore gcc c main.c gcc c matematica.c (produce main.o) (produce matematica.0) Per linkare i moduli oggetto producendo l eseguibile: usare gcc (che include il linker) nel modo seguente: gcc o prova main.o matematica.o (linka main.o e matematica.o producendo l eseguibile prova) Elementi di Informatica e Programmazione Università di Brescia 12

LIBRERIE I file contenenti funzioni di uso comune possono essere utilizzati in diversi programmi: creazione di librerie (moduli già compilati disponibili a diversi programmi che includano gli header corrispondenti) Il C prevede anche una libreria standard che fornisce funzionalità comuni (es: input/output): ad essa corrispondono moduli in linguaggio binario in una directory predefinita Gran parte di questi moduli (che si trovano in una directory predefinita) viene collegata automaticamente dal linker Elementi di Informatica e Programmazione Università di Brescia 13

Moduli Libreria standard modulo oggetto linker modulo eseguibile modulo oggetto Elementi di Informatica e Programmazione Università di Brescia 14

Inclusione di file header per utilizzare la libreria standard #include<stdio.h> #include <stdlib.h> #include Mialibreria.h Inclusione intestazioni librerie standard Inclusione intestazioni librerie utente int main(int argc, char *argv[]){ system("pause"); } Elementi di Informatica e Programmazione Università di Brescia 15

FILE DI INTESTAZIONE LIBRERIA STANDARD <assert.h> <ctype.h> <errno.h> <float.h> <limits.h> <locale.h> <math.h> Riferimenti: - CAP. 8, 9, 11 del testo - P.J. Plauger, The Standard C library Elementi di Informatica e Programmazione Università di Brescia 16 16

Matematica <math.h> /* Calcola la radice quadrata di x che dev essere non negativa*/ double sqrt (double x); /* Calcola il logaritmo naturale di x, che dev essere non negativo*/ double log(double x); /* Calcola il logaritmo in base 10 di x, che dev essere non negativo*/ double log10(double x); /* Calcola x elevato alla potenza y. Il valore di x dev essere non neg.*/ double pow(double x, double y); Elementi di Informatica e Programmazione Università di Brescia 17

Matematica <math.h> (2) /* Calcola il coseno di x (misurato in radianti)*/ double cos(double x); /* Calcola il seno di x (misurato in radianti)*/ double sin(double x); /* Suddivide valore in una parte intera e una frazionaria. Immagazzina la parte intera come double nell oggetto puntato da iptr. Restituisce la parte frazionaria*/ double modf(double valore, double *iptr); Elementi di Informatica e Programmazione Università di Brescia 18

ATTENZIONE Per utilizzare math.h, occorre indicare al compilatore di includere esplicitamente la libreria con l opzione -lm Esempio: compilazione di un unico file sorgente (include linker) gcc o prova prova.c -lm (prova.c contiene il main e usa math.h) Esempio: compilazione di due file in cui si usa math.h gcc c main.c gcc c matematica.c gcc o prova main.o matematica.o -lm Elementi di Informatica e Programmazione Università di Brescia 19

Limiti dell implementazione <limits.h> Definizione di MACRO mediante la direttiva #define CHAR_MAX // Valore massimo per oggetti di tipo char CHAR_MIN // Valore minimo per oggetti di tipo char INT_MAX // Valore massimo per oggetti di tipo int INT_MIN // Valore minimo per oggetti di tipo int Elementi di Informatica e Programmazione Università di Brescia 20

APPENDICE Elementi di Informatica e Programmazione Università di Brescia 21

Compilazione condizionale (cenni) Esempio1 #define DEBUG 1 #if DEBUG printf( Valore di x = %d\n, x); #endif Esempio2a Esempio2b #define DEBUG #if defined(debug) printf( Valore di x = %d\n, x); #endif #define DEBUG #ifdef DEBUG printf( Valore di x = %d\n, x); #endif Elementi di Informatica e Programmazione Università di Brescia 22

Compilazione condizionale (cenni) Altre direttive #elif #else ha il significato di else if ha il significato di else Alcuni utilizzi della compilazione condizionale Debugging Scrivere programmi portabili su diverse macchine Scrivere programmi compilabili su compilatori diversi Elementi di Informatica e Programmazione Università di Brescia 23