- Martedì 20 Settembre 2005. Introduzione e
organizzazione del corso, modalità di esame. Linguaggio C:
origine, filosofia, ambiti di applicazione, struttura di compilazione
(preprocessore, compilatore e linker). Direttive del preprocessore:
#define, #include, #if/#else/#endif; varianti #ifdef. Struttura
lessicale di un programma C; file sorgente, header locali e di sistema,
compilazione separata. Il programma HelloWorld.c. Il programma
Echo.c.
- Martedì 27 Settembre 2005.
Tipi di dato semplici del C; dimensioni tipiche dei tipi; qualificatori
unsigned, signed e const; uniformità
dei tipi integral; conversioni intero-carattere; convenzioni
sui booleani. Dichiarazioni di dati semplici; dichiarazioni con
inizializzazione; puntatori (operatori * e &) e struttura di
memoria. Primi cenni su stringhe, array e aritmetica dei puntatori.
- Martedì 4 Ottobre 2005.
Ancora sui puntatori. Aritmetica dei puntatori. Tipi di dato
complessi: array, struct, union. Equivalenza fra array e puntatori
const. Layout in memoria dei tipi complessi. Esempi di uso di
struct e union.
- Martedì 18 Ottobre 2005. Regole di
visibilità: ordinamento delle funzioni, prototipi, uso dei
file .h per le dichiarazioni di prototipi; qualificatori
di visibilità extern e static e loro uso
nella compilazione separata. Classi di memorizzazione: concetti
di dichiarazione, definizione e inizializzazione; memorizzazione di
variabili locali, globali e parametri; qualificatori di memorizzazione
auto, extern, static e register.
- Martedì 25 Ottobre 2005.
Usi avanzati dei puntatori: passaggio di parametri per riferimento,
puntatori a funzione, uso di campi di tipo "puntatore a funzione" per
simulare chiamate di metodo con le struct. Gestione a livello di singolo
bit della memoria: uso e limitazioni dei bitfield; uso di maschere e
operatori logico/aritmetici (&, |, ~,
>> e <<).
- Martedì 8 Novembre 2005.
Concetto di libreria, ruolo dei file .a e .h
corrispondenti nella compilazione. Libreria stdio.h, prima
parte: funzioni per l'I/O a caratteri e a righe (getchar(),
putchar(), gets(), puts()); rischi
connessi all'uso di gets(); funzioni per l'I/O formattato
(printf(), scanf() e specifiche di formato); I/O
formattato su stringhe (sprintf(), sscanf()).
- Martedì 15 Novembre 2005.
Funzioni di libreria per l'I/O su file. Il tipo FILE * e i file
standard stdin, stdout e stderr. Funzioni
fopen() e fclose(); letture e scritture a caratteri
(fgetc(), fputc()), a linee (fgets(),
fputs()), formattata (fprintf(), fscanf()) e
binaria (fread(), fwrite). Funzioni di posizionamento:
fseek(), ftell(), rewind(). Bufferizzazione
della libreria di IO standard: setbuf(), setbuffer()
e setvbuf(); condizioni di svuotamento del buffer e funzione
fflush().
- Martedì 22 Novembre 2005.
Altre funzioni di libreria (da string.h).
Funzioni su blocchi di memoria: memcpy(), memmove(),
memset(), memcmp(), memchr().
Funzioni su stringhe: strcpy(), strcat(),
strcmp(), strlen(); rischi legati a overflow dei buffer.
Funzioni su stringhe a lunghezza nota: strncpy(),
strncat(), strncmp(), strnlen(); rischi legati
a stringhe non terminate da \0.
Funzioni per l'allocazione di stringhe: strdup().
Funzioni di ricerca: strchr(), strrchr(), strspn(), strcspn(),
strpbrk(), strstr().
Funzioni di tokenizzazione: strtok(), strtok_r(); esempi di uso di strtok() e rischi legati all non-rientranza.
Funzioni per la decodifica dei codici di errore: strerror().
Funzioni di classificazione (da ctype.h): macro iscategoria(), funzioni tolower() e toupper().
Funzioni di gestione della memoria (da stdlib.h): malloc(), calloc(), realloc() e free(). Importanza del rilascio ordinato delle risorse.
- Martedì 29 Novembre 2005.
Ancora funzioni di libreria. Funzioni di conversione:
atof(), atoi(), atol(); conversione di
date: asctime(), ctime(), localtime(),
mktime(); rappresentazioni del tempo: struct tm e numero
di secondi dall'epoch; conversione di date in formato libero:
strftime() e strptime(). Funzioni per i numeri casuali:
rand() e srand(); cenni sui limiti di tali funzioni
e sulle possibili alternative. Funzioni di utilità sugli array:
qsort() e bsearch(); uso dei puntatori a funzione
e compatibilità degli ordinamenti. Funzioni di terminazione:
exit(), atexit() e on_exit().
- Martedì 6 Dicembre 2005.
Funzioni con numero variabile di argomenti, meccanismi di passaggio degli
argomenti sullo stack, macro in stdarg.h: va_start(),
va_arg(), va_end(). Lo strumento make:
struttura delle dipendenze in un progetto C di grandi dimensioni,
ricompilazione minima, sintassi del Makefile (dipendenze,
comandi, macro). Regole fittizie (clean, all). Esempio
di uso di make.
- Martedì 13 Dicembre 2005.
Descrizione e consegna dei progetti finali del corso; descrizione delle
modalità di esame.
Consulta il Registro ufficiale delle lezioni.