Questa è una vecchia versione del documento!
Esercitazione 3
Esercizio 1
Scrivere una funzione macro 'CHECK_PTR' che prende due argomenti, un puntatore ed una stringa, e stampa utilizzando perror la stringa passata come argomento prima di uscire dal programma con EXIT_FAILURE. Esempio di utilizzo:
FILE *fp;
CHECK_PTR(fp=fopen("fileprova.txt", "r"), opening fileprova.txt);
NOTA: per il secondo argomento della macro non ci sono le virgolette!
Se il file 'fileprova.txt' non esiste il risultato sarà:
opening fileprova.txt: No such file or directory
Stampare il valore di ritorno di un programma che testa la macro 'CHECK_PTR' sia in caso di successo che di fallimento. Ricordare che il valore di ritorno dell'ultimo comando bash eseguito si può stampare accedendo alla variabile di ambiente bash ? nel modo seguente echo $?..
Esercizio 2
Dato il seguente codice main C:
#define dimN 16
#define dimM 8
int main() {
long *M = malloc(dimN*dimM*sizeof(long));
CHECK_PTR(M, "malloc");
for(size_t i=0;i<dimN;++i)
for(size_t j=0;j<dimM;++j)
ELEM(M,i,j) = i+j;
PRINTMAT(M);
return 0;
}
scrivere le 3 macros CHECK_PTR, ELEM e PRINTMAT. Al suo interno PRINTMAT usa la macro ELEM per accedere agli elementi della matrice.
Esempio di output richiesto:
Stampo la matrice M: 0 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 2 3 ....
