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
Scarica

lucidi