Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio15:esercitazionia:esercitazione3

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 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
informatica/sol/laboratorio15/esercitazionia/esercitazione3.1426592589.txt.gz · Ultima modifica: 17/03/2015 alle 11:43 (10 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki