Sistemi operativi, A.A. 2011/2012 (M. Cesati) Scaletta esercitazione #2, 15.03.2012 1 Scrittura di un file di testo tramite text editor 1.1 In modalita' testo usare vi, joe, jed, emacs... 1.2 In modalita' grafica usare kate, gedit, kedit, nedit, nano, gvim, ... 2 Scrittura del programma "hello.c" 2.1 Include file "stdio.h" 2.2 Include file "stdlib.h" 2.3 Prototipo della funzione "main()" 2.4 Funzione di libreria "printf()" 2.4.1 Scrive sullo standard output del programma 2.5 Funzione "exit()" e valore di ritorno EXIT_SUCCESS (o EXIT_FAILURE) 3 Ciclo di compilazione di un programma 3.1 Pre-compilazione 3.1.1 Esempio: gcc -E 3.2 Compilazione (produce un file in assembler) 3.2.1 Esempio: gcc -S 3.3 Assemblaggio (produce un file oggetto) 3.3.1 Esempio: gcc -c 3.4 Collegamento (linking) (produce un file eseguibile) 3.4.1 Esempio: gcc +--------------+ +-----------+ File | | File | | File sorgente --->|Precompilatore|---> sorgente --->|Compilatore|---> assembler .c .h | (gcc -E) | .E | (gcc -S) | .s +--------------+ +-----------+ | | v +------------+ File File | | oggetto oggetto <---|Assemblatore| .o .o | (gcc -c) | +------------+ Libreria | | statica | | .a | v | +--------+ | +------------>| | File | | Linker |---> eseguibile +------------------------------>| (gcc) | +--------+ 4 Opzioni del compilatore piu' importanti 4.1 "-o nomefile": indica il nome del file eseguibile 4.2 "-O2": indica il livello di ottimizzazione 4.2.1 Importante: evitare "-O0", usare sempre almeno "-O" ossia "-O1" 4.3 "-W -Wall": abilitano i messaggi di avvertimento del compilatore 4.4 "-g": inserisce informazioni utili per l'uso con un debugger 4.5 "-l": collega con una libreria di sistema 5 Esecuzione di un programma 5.1 Ruolo della variabile d'ambiente PATH 5.2 Ruolo di "." in PATH 6 Richiami sui tipi di dati del C 6.1 char, short, int, long, long long, float, double, long double 6.2 signed / unsigned 6.3 Vettori unidimensionali 6.4 Operatore sizeof 7 Stringhe formato di printf 7.1 Qualificatori di tipo: "c" (carattere) "d" (intero con segno) "u" (intero senza segno) "x" (esadecimale) "f" "g" (virgola mobile) 7.2 Qualificatori di dimensione: "hh" (char) "h" (short) "l" (long) "ll" (long long) "L" (long double) 8 Costrutti di controllo 8.1 if else 8.2 while do 8.3 do while 8.4 for 9 Operatori: precedenza ed associativita' +--------+------------------------------------+--------------+ |Classe | Operatori |Associativita'| +--------+------------------------------------+--------------+ |elementi| () [] -> . |verso destra | |unari | ! ~ ++ -- + - * & (tipo) sizeof |verso sinistra| |prodott | * / % |verso destra | |somma | + - |verso destra | |shift | << >> |verso destra | |diseguag| < <= > >= |verso destra | |uguagl | == != |verso destra | |and bit | & |verso destra | |xor bit | ^ |verso destra | |or bit | | |verso destra | |and log | && |verso destra | |or log | || |verso destra | |ternario| ?: |verso sinistra| |assegnaz| = += -= *= /= %= &= ^= |= <<= >>= |verso sinistra| |concaten| , |verso destra | +--------+------------------------------------+--------------+ 10 Esercizio: Memorizzare in un vettore i primi 100 numeri primi 11 Lo stile di programmazione 11.1 I programmi semplici sono i migliori 11.2 I commenti fanno parte del programma 11.2.1 Inserire solo i commenti necessari 11.3 Pensare prima di scrivere, descrivere l'algoritmo prima di codificare 11.4 Nomi espliciti a variabili non generiche 11.5 Indentazione e formato del codice ===========