Introduzione alle direttive sul preprocessore in C

Molto spesso si fa un'idea sbagliata che i preprocessori o le macro facciano parte della compilazione del programma, ma è totalmente sbagliato. Le direttive del preprocessore sono il tipo di macro e una fase prima della compilazione. Si può dire che queste sono alcune istruzioni fornite al compilatore per eseguire la compilazione effettiva. Sono anche conosciute come abbreviazioni costruttive più lunghe per le macro, il che significa che il valore nelle macro viene sostituito con il segmento di codici. La macro è definita da un simbolo speciale e ha un simbolo che inizia con “#” Pertanto questi # define è una sorta di preprocessore speciale seguito dal compilatore effettivo. In questo argomento, impareremo le direttive sul preprocessore in C.

Il preprocessore ha un tipo speciale di rappresentazione per la sua identificazione come qualsiasi direttiva preprocessore si avvia da un simbolo speciale di "#" seguito da un identificatore e quindi dal nome della direttiva. Gli spazi bianchi sono consentiti anche prima e dopo il #. Ad esempio, # include.

Ci sono alcuni attacchi o strutture che un preprocessore C può fornire:

  • File di intestazione: l' inclusione dei file di intestazione è un modo in cui le dichiarazioni possono essere sostituite dalla sintassi del programma e dal corpo del programma.
  • Macro in espansione: definire le macro è come abbreviare un pezzo di codice che un preprocessore C sostituisce le macro con la loro rispettiva definizione.
  • Compilazione per condizioni: in base a vari scenari o condizioni diverse è possibile l'inclusione di determinate parti del programma mediante compilazione condizionale.
  • Controllo linea: se si utilizza un programma per combinare o riordinare qualcuno o più file di origine in un file intermedio per la compilazione, è possibile utilizzare il controllo di linea per informare il compilatore di dove ha origine ciascuna linea di origine.

Tipi di direttive per il preprocessore

Tutti i tipi di direttive sul preprocessore sono i seguenti:

  1. # define
  2. # includere
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # Se
  7. #altro
  8. #elif
  9. #finisci se
  10. #errore
  11. #pragma

1. #define (Macro)

Una macro è uno snippet di codice che viene sostituito da un valore del codice della macro. Ogni macro è principalmente descritta e definita dalla sua direttiva #define.

Sintassi:

#define token value

Esistono due tipi di macro:

  • Macro simili a funzioni
  • Macro simili a oggetti
Macro simili a funzioni

La funzione like-macro funziona quasi come una chiamata di funzione.

Per esempio:

#define MAX(a, b) ((a)>(b) ? (a): (b))

MAX qui è il nome Macro.

Esempio:

Produzione:

Macro simili a oggetti

Le macro simili a oggetti sono il tipo di identificativo sostituito dal valore. Viene utilizzato principalmente per rappresentare costanti numeriche.

#define PI 3.1415

Qui il valore di PI verrà sostituito dalla macro.


Produzione:

2. #include

C'è qualche altra funzionalità per la direttiva include preprocessore. Ha le sue tre varianti che sostituiscono il codice con l'attuale codice dei file di origine.

Tre varianti sono le seguenti:

  • #includere
  • #include”file”
  • Includi qualsiasi altra cosa

#includere

Cerca un file nell'elenco definito del sistema o delle directory come specificato, quindi cerca un elenco standard di librerie di sistema.

#include”file”

Questo tipo viene utilizzato per i file di intestazione personalizzati del programma. Viene prima effettuata la ricerca di un file denominato file nella directory corrente, seguito dai file di intestazione del sistema e dalle directory correnti del file corrente della directory.

#include qualsiasi cosa

Questo tipo di direttiva include preprocessore viene utilizzato quando nessuno degli altri due tipi rimanenti della direttiva e i suoi argomenti non si adattano e soddisfano la struttura di calcolo.

3. #Ifdef

Verifica se la macro è definita da # define o no. Se sì, eseguirà il codice altrimenti non lo farà.

Sintassi:

#ifdef MACRO
(
Code body
)
#endif
#undef:

Annullare la definizione di una macro significa che non è definita ed è preceduta dalla direttiva #undef.

Sintassi:

#undef token

Produzione:

4. Ifndef

Questo processore controlla se #define è definito o no da #define. Se sì, esegue il codice.

Sintassi:

#Ifndef MACRO
//code
#endif
#If

Questo processore funziona solo come un ciclo if, valuta l'espressione o la condizione. Se la condizione è vera, eseguirà il codice altrimenti.

Sintassi:

#if expression
//code
#endif
#else

La direttiva preprocessore #else viene utilizzata per valutare l'espressione o la condizione se la condizione di #if è falsa. Può essere utilizzato con le direttive #if, #elif, #ifdef e #ifndef.

Sintassi:

#if expression
//if body
#else
//else body
#endif

Esempio:

Produzione:

5. #Errore

Come suggerisce il nome, la direttiva del preprocessore di errori viene utilizzata per indicare un errore, quindi il compilatore genera un errore irreversibile se viene trovata la direttiva di errore e salta i passaggi successivi della compilazione.

Produzione:

6. #pragma

Dipende dal compilatore poiché diversi sistemi operativi e macchine diverse forniscono tutti i tipi di funzionalità del sistema operativo che viene utilizzato dal compilatore per offrire ulteriori informazioni al compilatore.

Sintassi:

#pragma token

Esempio:

Produzione:

Ogni preprocessore ha il suo significato come la direttiva condizionale viene utilizzata per verificare se una parte del programma deve essere presa in considerazione in base a scenari o meno.

Supponiamo che un programma voglia essere compilato in un ambiente specifico con la configurazione specifica del sistema operativo ma non appena passa a quella fase di compilazione genera un errore o può dare un codice non valido semplicemente dando al suo programma la possibilità di un grande no per collegare il programma ed eseguirlo durante l'esecuzione. Può esserci un'altra possibilità anche in cui lo stesso file di origine con due programmi diversi può effettuare un controllo di coerenza che richiede molto tempo o i suoi dati immediati o stampare i valori dei dati con il debug.

Inoltre, questi scenari da creare con il calcolo possono anche essere usati per essere eseguiti su una macchina usando le direttive di preelaborazione.

Conclusione

L'output del preprocessore C assomiglia molto all'input, tranne per il fatto che tutte le direttive di preelaborazione sono state sostituite con righe vuote o spazi bianchi. File e formati diversi hanno sintassi diverse che affermano che è stato creato l'inizio di un nuovo file o che indicano che è necessario eseguire un ritorno a un file o l'elaborazione prima della compilazione.

Tutti gli scenari vengono utilizzati per far conoscere agli altri la potenza del preprocessore C e come si sta evolvendo con le diverse versioni del compilatore iniziate con gli standard GCC e ANSI.

Articoli consigliati

Questa è una guida alle direttive del preprocessore in C. Qui discutiamo i tipi di direttive del preprocessore con sintassi ed esempi. Puoi anche dare un'occhiata ai seguenti articoli per saperne di più-

  1. Numero inverso in C
  2. Ordinamento in C
  3. Funzione di hash in C
  4. Continua Dichiarazione in C
  5. Ordinamento in C #
  6. Come funziona la funzione di hashing in php?

Categoria: