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 1: 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 2: 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
