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 ....