Condividi tramite


Macro (C/C++)

Il preprocessore espande le macro in tutte le righe, ad eccezione delle direttive del preprocessore, le righe con come # primo carattere non vuoto. Espande le macro in parti di alcune direttive che non vengono ignorate come parte di una compilazione condizionale. Le direttive di compilazione condizionale consentono di eliminare la compilazione di parti di un file di origine. Testano un'espressione costante o un identificatore per determinare quali blocchi di testo passare al compilatore e quali rimuovere dal file di origine durante la pre-elaborazione.

La direttiva #define viene generalmente utilizzata per associare identificatori significativi a costanti, parole chiave e istruzioni o espressioni di uso comune. Gli identificatori che rappresentano costanti sono talvolta denominate costanti simboliche o costanti manifesto. Gli identificatori che rappresentano istruzioni o espressioni vengono chiamati macro. In questa documentazione relativa al preprocessore, viene utilizzato esclusivamente il termine "macro".

Quando il nome di una macro viene riconosciuto nel testo dell'origine del programma o negli argomenti di alcuni altri comandi del preprocessore, viene considerato come una chiamata a tale macro. Il nome della macro viene sostituito con una copia del corpo della macro. Se la macro accetta argomenti, gli argomenti effettivi che seguono il nome della macro vengono sostituiti dai parametri formali nel corpo della macro. Il processo di sostituzione di una chiamata di macro con la copia elaborata del corpo viene chiamato espansione della chiamata di macro.

In pratica, esistono due tipi di macro. Le macro simili a oggetti non accettano argomenti. È possibile definire macro simili a funzioni per accettare argomenti, in modo che siano simili alle chiamate di funzione. Poiché le macro non generano chiamate di funzione effettive, a volte è possibile velocizzare l'esecuzione dei programmi sostituendo le chiamate di funzione con le macro. In C++, le funzioni inline sono spesso un metodo preferito. Tuttavia, le macro possono creare problemi se non vengono definiti e usati con attenzione. Per le definizioni di macro con argomenti, potrebbe essere necessario utilizzare le parentesi, in modo da mantenere la precedenza appropriata all'interno delle espressioni. Le macro, inoltre, potrebbero non essere in grado di gestire correttamente le espressioni con effetti collaterali. Per altre informazioni, vedere l'esempio getrandom nella direttiva #define.

Dopo aver definito una macro, non è possibile ridefinirla in un valore diverso senza prima rimuovere la definizione originale. È, tuttavia, possibile ridefinire la macro con la stessa definizione. Pertanto, la stessa definizione può apparire più volte in un programma.

La #undef direttiva rimuove la definizione di una macro. Dopo aver rimosso la definizione, è possibile ridefinire la macro in un valore diverso. La direttiva #define e la direttiva #undef illustrano rispettivamente le #define direttive e #undef .

Per ulteriori informazioni, vedere,

Vedi anche

Informazioni di riferimento sul preprocessore C/C++