Laboratorio di Linguaggi lezione XI Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Progetti a piu' files: condividere macro
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a file " main.c " file " auxiliary.c " #include "auxiliary.h" int pippo=2; static int i=0; int funz1(int b,int e) {... pippo... } file " main.c " #include "auxiliary.h" int main(){ int x; x = funz1(5, 6);... if (pippo)...;... } 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 */ extern int pippo;
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a 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)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Le librerie esterne #include NB: parentesi angolate
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Librerie standard più comunemente usate... : Utilità generali (malloc, calloc, free, NULL, rand...) : Input/Output (printf, sprintf, scanf, FILE...) : Funzioni matematiche (sin, cos, exp, sqrt, fabs...) : Funzioni su caratteri (isdigit, isgraph...) : Funzioni su stringhe (strcmp, strcpy) : Funzioni di ora e data (clock, time...) : Definizioni valori Limite di interi (INT_MAX, INT_MIN...) : Definizioni valori Limite di floats (DBL_MAX, DBL_MIN...) : Diagnostica (assert)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Uso di librerie e linker Esempio: la libreria OpenGL (grafica 3D) #include... int main(){... /* usa OpenGl */... } Sono dichiarazioni ("promesse"). E le definizioni corrispondenti? Il file GL/gl.h contiene: – definizioni tipi di dato – funzioni (i prototipi) – variabili (come "extern") – costanti – macros
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Progetti a piu' files: collisioni eseguibile finale exec.exe linker main.c sorgenti di OpenGL OpenGL.h pre- process. file precomp. 1 compiler object file main.o pre- process. file precomp. 3 compiler file di libreria (già compilata) OpenGL32.lib
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a Per linkare la libreria (già compilata) in Dev-C++