informatica:sol:laboratorio16:esercitazionib:esercitazione2
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
informatica:sol:laboratorio16:esercitazionib:esercitazione2 [25/02/2016 alle 11:41 (9 anni fa)] – [Esercizio 1: preprocessing, compilazione e linking] Susanna Pelagatti | informatica:sol:laboratorio16:esercitazionib:esercitazione2 [03/03/2016 alle 08:23 (9 anni fa)] (versione attuale) – [Esercizio 1: preprocessing, compilazione e linking] Susanna Pelagatti | ||
---|---|---|---|
Linea 2: | Linea 2: | ||
- | Dove si sperimenta qualche tool e si approfondiscono alcune caratteristiche del C sequenziale: | + | Dove si sperimenta qualche tool e si approfondiscono alcune caratteristiche del C sequenziale: |
- | ===== Esercizio 1: preprocessing, compilazione e linking ===== | + | ===== Esercizio 1: Preprocessing, compilazione e linking ===== |
Seguire l' | Seguire l' | ||
- | ===== Esercizio 2: verificare gli accessi in memoria: valgrind ===== | + | ===== Esercizio 2: Creare ed usare una libreria di liste ===== |
+ | |||
+ | Realizzare una libreria che fornisce le operazioni su liste implementate negli esercizi 2 e 3 dell' | ||
+ | |||
+ | In C tipicamente per realizzare una libreria si difinisce un file '' | ||
+ | |||
+ | Nel nostro caso l' | ||
+ | |||
+ | Procedere nel modo seguente: | ||
+ | |||
+ | * Definire un file '' | ||
+ | * Definire un file '' | ||
+ | * Generare il modulo oggetto '' | ||
+ | < | ||
+ | $ gcc -Wall -pedantic -c lista.c | ||
+ | </ | ||
+ | * Creare la libreria con i lcomando '' | ||
+ | < | ||
+ | $ ar -r libList.a lista.o | ||
+ | </ | ||
+ | |||
+ | Quando la creazione e' andata a buon fine creare un file '' | ||
+ | * il main di test dovra' includere il file '' | ||
+ | * in fase di compilazione utilizzare la libreria sviluppata con | ||
+ | < | ||
+ | $ gcc -Wall -pedantic main.c -lList -L. | ||
+ | </ | ||
+ | dove l' | ||
+ | . | ||
+ | |||
+ | |||
+ | ===== Esercizio 3: Manipolare '' | ||
+ | |||
+ | In C, la maggior parte delle funzioni di libreria che segnalano un errore settano anche la variabile globale '' | ||
+ | < | ||
+ | bash$ man errno | ||
+ | </ | ||
+ | Dopo l' | ||
+ | E' possibile manipolare '' | ||
+ | <code c> | ||
+ | #include < | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | ===== Esercizio 4: Generazione numeri casuali con '' | ||
+ | |||
+ | Generare '' | ||
+ | * Calcolare il numero di occorrenze '' | ||
+ | * Per ogni '' | ||
+ | * Esaminare le occorrenze degli interi nell' | ||
+ | * Che distribuzione hano i numeri generati ? | ||
+ | |||
+ | ===== Esercizio 5: Generazione numeri casuali con '' | ||
+ | Ripetere l' | ||
+ | |||
+ | ===== Esercizio 6: Verificare | ||
Verificare la correttezza degli accessi ai puntatori compiuti dalle funzioni su liste di interi della libreria libList.a utilizzando '' | Verificare la correttezza degli accessi ai puntatori compiuti dalle funzioni su liste di interi della libreria libList.a utilizzando '' | ||
Linea 25: | Linea 81: | ||
in questo modo, a schermo verranno riportare le infrazioni rilevate. Ad esempio, //invalid read// o //invalid write// sono accessi in lettura o scrittura a memoria non allocata o gia' deallocata. | in questo modo, a schermo verranno riportare le infrazioni rilevate. Ad esempio, //invalid read// o //invalid write// sono accessi in lettura o scrittura a memoria non allocata o gia' deallocata. | ||
- | ===== Esercizio 3: Manipolare '' | ||
- | In C, la maggior parte delle funzioni di libreria che segnalano un errore settano anche la variabile globale '' | + | ===== Esercizio 7: Ancora su -- Preprocessing, compilazione e linking ===== |
+ | 1) Compilare ed eseguire il seguente programma: | ||
+ | <code c> | ||
+ | #include <stdio.h> | ||
+ | #include < | ||
+ | |||
+ | int main (void) { | ||
+ | double x=3.0; | ||
+ | |||
+ | printf(" | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | salvato nel file //ff.c// con | ||
< | < | ||
- | bash$ man errno | + | gcc -Wall -pedantic ff.c |
</ | </ | ||
- | Dopo l'esecuzione | + | Chi segnala un errore? E' |
- | E' possibile manipolare '' | + | |
+ | 2) Cosa accade se eliminiamo la linea | ||
<code c> | <code c> | ||
- | #include <errno.h> | + | #include <math.h> |
</ | </ | ||
+ | ? A questo punto cosa va storto? Sapete interpretare i messaggi a video e stabilire chi li ha scritti e perche'? | ||
- | L' | + | 3) Generare il modulo oggetto con |
+ | < | ||
+ | gcc -Wall -pedantic -c ff.c | ||
+ | </ | ||
- | ===== Esercizio | + | Utilizzare //objdump, nm, readelf// per capire cosa contengono la tabella di rilocazione, |
+ | |||
+ | 4) Usare l' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Esercizio | ||
+ | Usare le macro con parametri per definire una macro che somma (operatore +) i propri argomenti | ||
+ | <code c> | ||
+ | #define SOMMA(X, | ||
+ | </ | ||
+ | e testarla in un opportuno main. Valutare le differenze con una funzione di prototipo | ||
+ | <code c> | ||
+ | int SOMMA(int X,int Y, int Z); | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Esercizio 9: Macro con parametri, macro FATTORIALE ===== | ||
+ | |||
+ | Scrivere una macro con parametri che calcoli il fattoriale di un numero N, passato come parametro e ne stampi il risultato. Ad esempio, posso utilizzare la macro per calcolare il fattoriale di 4+1 con | ||
+ | <code c> | ||
+ | FATTORIALE(4+1) | ||
+ | </ | ||
+ | La macro non deve fare assunzioni su come verranno passati i parametri. | ||
+ | Che accade annidando due chiamate della macro? Ad esempio | ||
+ | <code c> | ||
+ | FATTORIALE(FATTORIALE(4+1)) | ||
+ | </ | ||
- | Generare '' | ||
- | * Calcolare il numero di occorrenze '' | ||
- | * Per ogni '' | ||
- | * Esaminare le occorrenze degli interi nell' | ||
- | * Che distribuzione hano i numeri generati ? | ||
- | * |
informatica/sol/laboratorio16/esercitazionib/esercitazione2.1456400519.txt.gz · Ultima modifica: 25/02/2016 alle 11:41 (9 anni fa) da Susanna Pelagatti