Concetti Chiave
- La direttiva #define consente di creare macro che possono contenere spazi e sono definite fino alla fine della riga, a meno che non si usi il simbolo \ per estenderle.
- Le macro definite con #define non possono essere modificate durante l'esecuzione del programma, ma possono essere annullate con #undef.
- Le macro possono essere valutate due volte, il che può causare problemi con l'incremento di variabili o con operazioni di input/output.
- Le macro speciali come _FILE_, _LINE_, _DATE_, _TIME_, e _func_ sono utilizzate per fornire informazioni di debug come il nome del file o la linea di codice.
- Le macro sono utili per evitare l'overhead di memoria associato alle chiamate di funzione, come dimostrato con esempi quali getchar e putchar.
Indice
Direttiva #define
La direttiva permette di definire macro definizioni o macro: #define
L’identificatore è scritto solitamente in caratteri maiuscoli e non può iniziare per numero, e il testo della macro può contenere spazi e finisce alla fine della riga a meno che non si aggiunga \ senza aggiungere mai uno spazio dopo, per avere istruzioni su più righe. Non si può assegnare o modificare il valore della macro durante il programma.
È possibile anche annullare la definizione della macro con la direttiva #undef
Si può usare # per porre in forma di stringa quello che segue:
# define printCODE ( code ) printf (# code );
# define printEXP ( expr ) printf (# expr "=%d", expr );
Una definizione può sfruttare altre definizioni precedenti, le sostituzioni vengono effettuate sui token e non ci sono nel caso di stringhe tra apici. Non è necessario avere macro diverse per tipi di dati diversi. Le macro vengono valutate due volte, il che può essere un problema nel caso di incremento di variabili o input e output. Le macro vengono utilizzate anche per evitare l’overhead di memoria per ogni chiamata di funzione (es. getchar, putchar). Ci sono inoltre alcune macro speciali che possono essere utilizzate in fase di debugging nel codice.
Macro
_FILE_ stringa costante contenente il nome del file in cui e usata la macro
_LINE_ intero corrispondente alla linea di codice su cui e posta la macro
_DATE_ stringa costante contenente la data di compilazione
_TIME_ stringa costante contenente l'ora di compilazione
_func_ variabile di tipo stringa che contiene il nome della funzione in cui e posta la macro