LLS '05/'06: Contenuto delle lezioni


  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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 <<).
  6. 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()).
  7. 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().
  8. 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.
  9. 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().
  10. 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.
  11. Martedì 13 Dicembre 2005. Descrizione e consegna dei progetti finali del corso; descrizione delle modalità di esame.

Consulta il Registro ufficiale delle lezioni.