Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio11:esercitazioni:esercitazione3

Questa è una vecchia versione del documento!


Esercizio 1: Getting started -- Preprocessing, compilazione e linking

0.1) Compilare ed eseguire il seguente programma:

#include <stdio.h>
#include <math.h>
 
int main (void) {
  double x=3.0;
 
  printf("Radice = %f\n",sqrt(x));
  return 0;
}

salvato nel file ff.c con

gcc -Wall -pedantic ff.c

Chi segnala un errore? E' fallita la fase di preprocessing, la compilazione o il linking? Cosa contine il modulo oggetto se specifico l'opzione -c? Come si risolve il problema?

0.2) Cosa accade se eliminiamo la linea

#include <math.h>

? A questo punto cosa va storto? Sapete interpretare i messaggi a video e stabilire chi li ha scritti e perche'? Viene generato l'eseguibile?

0.3) Generare il modulo oggetto con

gcc -Wall -pedantic -c ff.c

Utilizzare objdump, nm, readelf per capire cosa contengono la tabella di rilocazione, la tabella dei simboli esportati ed esterni, le sezioni data, BSS e codice. (utilizzare il man e cercare su google).

0.4) Usare l'opzione -E e la -S del gcc: che cosa succede? Cosa accade specificando il flag -g assieme a -S?

Esercizio 2: Makefile per la libreria di liste

Con riferimento agli esercizi 1 e 3 della esercitazione 1 , definire un file Makefile che contenga

  • le regole per generare correttamente main.o e lista.o
  • la regola PHONY lib per generare correttamente la libreria libList.a
  • la regola per generare l'eseguibile a partire da oggetti e librerie
  • un target PHONY cleanall che elimini gli oggetti e gli eseguibili

utilizzare dove possibile le regole implicite, le variabili e le convenzioni viste a lezione. Usare gcc -MM per generare automaticamente le liste di dipendenze per i target relativi ai moduli oggetto.

Esercizio 4: Macro con parametri, macro di somma

Usare le macro con parametri per definire una macro che somma (operatore +) i propri argomenti

#define SOMMA(X,Y,Z) ......

e testarla in un opportuno main. Valutare le differenze con una funzione di prototipo

int SOMMA(int X,int Y, int Z);

Esercizio 5: 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

FATTORIALE(4+1)

La macro non deve fare assunzioni su come verranno passati i parametri. Che accade annidando due chiamate della macro? Ad esempio

FATTORIALE(FATTORIALE(4+1)) 
informatica/sol/laboratorio11/esercitazioni/esercitazione3.1298998469.txt.gz · Ultima modifica: 01/03/2011 alle 16:54 (15 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki