La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Il preprocessore. 2 Viene invocato dal gcc prima della compilazione vera e propria ( cpp ) Esegue delle manipolazioni testuali sul file –sostituisce.

Presentazioni simili


Presentazione sul tema: "1 Il preprocessore. 2 Viene invocato dal gcc prima della compilazione vera e propria ( cpp ) Esegue delle manipolazioni testuali sul file –sostituisce."— Transcript della presentazione:

1 1 Il preprocessore

2 2 Viene invocato dal gcc prima della compilazione vera e propria ( cpp ) Esegue delle manipolazioni testuali sul file –sostituisce nomi con testo –elimina e inserisce testo Le righe di codice che iniziano per # sono direttive per il cpp Il risultato del preprocessore si può vedere con gcc -E

3 3 Il preprocessore : direttive #include #include “file” –sono rimpiazzate dal contenuto del file #define nome testo –macro senza parametri –tutte le occorrenze di nome sono rimpiazzate dal testo specificato

4 4 Macro con parametri È possibile definire macro con parametri! #define nome(a1,…,an) testo –in questo caso il nome simbolico da sostituire può essere specializzato ad ogni occorrenza della macro es. #define PRODOTTO(X,Y) (X)*(Y) … a = PRODOTTO(a+1,b); c = PRODOTTO(x+y,k); …

5 5 Macro con parametri (2) –Dopo la passata del pre-processore... /* la linea della define non c’e’ piu’ */ … a = (a+1)*(b); c = (x+y)*(k); … –Le parentesi nella definizione sono importanti per avere la precedenza corretta degli operatori!

6 6 Macro con parametri (3) –Una definizione scorretta sarebbe. #define PRODOTTO(X,Y) X*Y … a = PRODOTTO(a+1,b); c = PRODOTTO(x+y,k); …

7 7 Macro con parametri (4) –Risultato dopo il pre-processore... /* la linea della define non c’e’ piu’ */ … a = a+1*b; c = x+y*k; …

8 8 Macro e Funzioni Attenzione alla differenza fra macro con parametri e funzioni ! –(1) Le macro sostituiscono testo per testo –(2) una macro viene espansa a tempo di compilazione e non genera chiamate in fase di esecuzione

9 9 Macro e Funzioni (2) Attenzione alla differenza fra macro con parametri e funzioni ! –(3) Le macro non sono tipate! Funzionano indipendentemente dal tipo degli argomenti #define PRODOTTO(X,Y) X*Y double a,b; int x,y,k,c; … a = PRODOTTO(a+1,b); c = PRODOTTO(x+y,k);

10 10 Macro su più righe... –Attenzione : il testo da sostituire va da X fino alla fine della riga #define PRODOTTO(X,Y) X*Y … –Per fare macro su più righe usare backslash(\) #define PRODOTTO(X,Y) \ X*Y

11 11 Compilazione condizionale #if #ifdef #ifndef #endif : –sono direttive al preprocessore che permettono di includere selettivamente alcuni pezzi del codice durante la compilazione –#if #if espr_cond #endif Questa zona viene inclusa solo se espr_cond è verificata (cioè se è diversa da 0)

12 12 Compilazione condizionale (2) #if #ifdef #ifndef #endif : –es: un modo rapido per commentare un’area che ha già dei commenti /*…*/ –il C non ammette commenti annidati #if 0 #endif Questa zona non viene mai inclusa

13 13 Compilazione condizionale (3) #if #ifdef #ifndef #endif : –#ifdef nome testa se nome è già stato definito con una #define #ifdef nome #endif Questa zona viene inclusa solo se nome è stato definito con una #define

14 14 Compilazione condizionale (4) #if #ifdef #ifndef #endif : –#ifndef nome testa se nome non è già stato definito con una #define #ifndef nome #endif Questa zona viene inclusa solo se nome non è già stato definito con una #define

15 15 Compilazione condizionale (5) #if #ifdef #ifndef #endif : –quando si usano ? –Es. escludere condizionalemnte il codice di debugging –se ho finito il debugging tolgo la #define #define DEBUG …. #ifdef DEBUG #endif assert(..) printf(..)

16 16 Compilazione condizionale (6) #if #ifdef #ifndef #endif : –questo si può fare utilizzando gcc -D gcc -Dnome=val file.c inserisce all’inizio di file.c (prima del preprocessing) #define nome val –in questo caso (1) durante il debugging uso -D (2) quando il debugging è finito compilo senza -D ed il codice di test non viene generato


Scaricare ppt "1 Il preprocessore. 2 Viene invocato dal gcc prima della compilazione vera e propria ( cpp ) Esegue delle manipolazioni testuali sul file –sostituisce."

Presentazioni simili


Annunci Google