Concetti Chiave

  • Le macro vengono definite utilizzando la direttiva #define e l'identificatore è solitamente scritto in maiuscolo, senza spazi e senza iniziare con un numero.
  • È possibile annullare una macro precedentemente definita utilizzando la direttiva #undef, permettendo così di gestire le macro in modo flessibile.
  • Le macro possono essere utilizzate per evitare l'overhead di memoria associato alle chiamate di funzione, rendendo il codice più efficiente.
  • Le macro vengono valutate due volte, il che può causare problemi in situazioni come l'incremento di variabili o operazioni di input/output.
  • Esistono macro speciali, come _FILE_, _LINE_, _DATE_ e _TIME_, che forniscono informazioni utili per il debugging durante lo sviluppo del codice.

Indice

  1. Definizione e utilizzo delle macro
  2. Annullamento e stringhe nelle macro

Definizione e utilizzo delle macro

La direttiva permette di definire macro definizionioni o macro: #define identificatoreoreoreore> []

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.

Annullamento e stringhe nelle macro

È 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.

_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


Domande da interrogazione

  1. Cosa sono le macro e come vengono utilizzate nel codice?
  2. Le macro sono definizioni che permettono di sostituire un identificatore con un testo specifico nel codice, utilizzando la direttiva #define. L'identificatore è solitamente in maiuscolo e non può iniziare con un numero. Non è possibile modificare il valore della macro durante l'esecuzione del programma.

  3. Come si può annullare una macro già definita?
  4. È possibile annullare la definizione di una macro utilizzando la direttiva #undef, che consente di rimuovere la macro dal codice.

  5. Quali sono i vantaggi e i rischi associati all'uso delle macro?
  6. Le macro possono ridurre l'overhead di memoria per le chiamate di funzione e sono utili in fase di debugging. Tuttavia, poiché vengono valutate due volte, possono causare problemi, specialmente con operazioni di incremento su variabili.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community