Questa è una vecchia versione del documento!
Esercitazione 3
Ancora su C, macros, libreria standard di IO, creazione di librerie statiche, semplici makefile.
Cercare di completare tutti gli esercizi durante le ore di laboratorio e nel caso come homework.
Esercizio 0: macro
Dato il seguente codice main C:
#define dimN 16 #define dimM 8 int main() { long *M = malloc(dimN*dimM*sizeof(long)); assert(M); 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 2 macros 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 ....
Esercizio 1: macro
Scrivere 2 macros CHECK_EQ
e CHECK_NEQ
che controllano che il primo argomento passato sia uguale (_EQ) o diverso (_NEQ) al secondo argomento passato alla macro, qualora la condizione sia vera allora deve essere stampa utilizzando la chiamata di libreria perror
la stringa passata come 3 argomento, il numero di riga dove la macro è stata chiamata ed il nome del file contenente la chiamata stessa.
E. supponiamo che miofile.c contenga a riga 10 il seguente codice
CHECK_EQ(p=malloc(N*sizeof(long)), NULL, "malloc");
l'output dovrà essere (supponendo in questo caso che la malloc vada a buon fine):
"malloc": Success ERRORE ALLA LINEA 10 DEL FILE miofile.c