Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Laboratorio di Linguaggi Progetti a piu' files: condividere macro lezione XI Marco Tarini file "auxiliary.h" /* MAXN: il numero max... blah blah */ #define MAXN 100 typedef enum { ... } TipoStrano; /* funzione 1: blah blah */ int funz1(int, int); /* pippo: blah blah */ file "main.c" extern int pippo; file "main.c" file "auxiliary.c" #include "auxiliary.h" #include "auxiliary.h" int main(){ int x; x = funz1(5, 6); ... if (pippo) ...; ... } int pippo=2; static int i=0; Marco Tarini ‧ Laboratorio di Linguaggi ‧ int funz1(int b,int e) { ... pippo ... } 2004/05 ‧ Università dell’Insubria Progetti a piu' files: perchè? • Scopi: – Modularità del progetto software • dividere il progetto in aree concettualmente separate • mantenibilita', chiarezza... – Separazione interfaccia / implementazione – Riutilizzabilità del codice – Parallelizzazione dello sviluppo software – Riduzione tempo di ri-compilazione • (sempre meno) • (ma, storicamente, tra le motivazioni principali) Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2004/05 ‧ Università dell’Insubria Le librerie esterne NB: parentesi angolate #include <stdio.h> Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2004/05 ‧ Università dell’Insubria Librerie standard più comunemente usate... <stdlib.h> : Utilità generali (malloc, calloc, free, NULL, rand...) <stdio.h> : Input/Output (printf, sprintf, scanf, FILE...) <math.h> : Funzioni matematiche (sin, cos, exp, sqrt, fabs...) <ctype.h> : Funzioni su caratteri (isdigit, isgraph...) <string.h> : Funzioni su stringhe (strcmp, strcpy) <time.h> : Funzioni di ora e data (clock, time...) <limits.h> : Definizioni valori Limite di interi (INT_MAX, INT_MIN...) <float.h> : Definizioni valori Limite di floats (DBL_MAX, DBL_MIN...) <assert.h> : Diagnostica (assert) Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2004/05 ‧ Università dell’Insubria Uso di librerie e linker • Esempio: la libreria OpenGL (grafica 3D) Il file GL/gl.h contiene: – definizioni tipi di dato – funzioni (i prototipi) #include <GL/gl.h> – variabili (come "extern") ... int main(){ ... /* usa OpenGl */ ... } – costanti – macros Sono dichiarazioni ("promesse"). E le definizioni corrispondenti? Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2004/05 ‧ Università dell’Insubria Progetti a piu' files: collisioni main.c preprocess. file precomp. compiler 1 object file main.o OpenGL.h linker sorgenti predi process. OpenGL file precomp. compiler 3 Marco Tarini ‧ Laboratorio di Linguaggi ‧ eseguibile finale exec.exe file di libreria (già compilata) OpenGL32.lib 2004/05 ‧ Università dell’Insubria Per linkare la libreria (già compilata) in Dev-C++ Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2004/05 ‧ Università dell’Insubria