Compilazione di un programma C – Dietro la scena
Un preprocessore è un software di sistema (un programma di computer che è progettato per funzionare sull’hardware del computer e sui programmi applicativi). Esegue la pre-elaborazione del linguaggio di alto livello (HLL). La pre-elaborazione è il primo passo del sistema di elaborazione del linguaggio. Il sistema di elaborazione del linguaggio traduce il linguaggio ad alto livello in linguaggio macchina o codice macchina assoluto (cioè nella forma che può essere compresa dalla macchina).
- Il preprocessore non conosce le regole di portata del C. Le direttive del preprocessore come #define entrano in vigore non appena vengono viste e rimangono in vigore fino alla fine del file che le contiene; la struttura a blocchi del programma è irrilevante.
Un preprocessore esegue principalmente tre compiti sul codice HLL :
- Rimozione dei commenti: Rimuove tutti i commenti. Un commento è scritto solo per gli umani per capire il codice. Quindi, è ovvio che non sono di alcuna utilità per una macchina. Quindi, il preprocessore li rimuove tutti in quanto non sono richiesti nell’esecuzione e non saranno eseguiti.
Ecco come vedere un file con commenti rimossi in linux) :
Scrivi un codice C (lascia che il nome del file sia prog.c). Preprocessalo usando il comando gcc -E prog.c
Vedrai l’output con il codice senza commenti.
Questo file viene salvato con un’estensione ‘.i’ (prog.i) che sarà in ingresso al compilatore. - Inclusione di file: inclusione di tutti i file di libreria di cui il nostro programma ha bisogno. In HLL scriviamo #include che è una direttiva per il preprocessore che gli dice di includere il contenuto del file di libreria specificato. Per esempio, #include dirà al preprocessore di includere tutti i contenuti del file di libreria stdio.h.
Questo può anche essere scritto usando i doppi apici – #include “stdio.h”
Nota: Se il nome del file è racchiuso tra parentesi angolari, il file viene cercato nei percorsi di inclusione standard del compilatore. Se il nome del file è racchiuso tra doppi apici, il percorso di ricerca viene espanso per includere la directory dei sorgenti corrente. - Espansione delle macro: le macro possono essere chiamate come piccole funzioni che non sono altrettanto overhead da elaborare. Se dobbiamo scrivere una funzione (con una piccola definizione) che deve essere chiamata ricorsivamente (ancora e ancora), allora dovremmo preferire una macro piuttosto che una funzione.
Quindi, la definizione di queste macro è fatta dal preprocessore.#define SI 1000
è un semplice esempio di macro.
- Ci sono due tipi di macro: Object-like (non prendono parametri) e function-like (possono prendere parametri)
// object-like macro#define // function-like macro #define ()
- Puoi cancellare una definizione macro con #undef:
// delete the macro# undef
- Possiamo scrivere macro multilinea come una funzione, ma ogni dichiarazione finisce con “\”.
#include <stdio.h>
#define MACRO(num, str) {\
printf
(
"%d"
, num);\
printf
(
" is"
);\
printf
(
" %s number"
, str);\
printf
(
"\n"
);\
}
- Ci sono due tipi di macro: Object-like (non prendono parametri) e function-like (possono prendere parametri)
Questo articolo è stato contribuito da Diksha. Se ti piace GeeksforGeeks e vuoi contribuire, puoi anche scrivere un articolo usando contribute.geeksforgeeks.org o inviare il tuo articolo a [email protected]. Vedi il tuo articolo apparire sulla pagina principale di GeeksforGeeks e aiuta altri Geek.