Kompilering af et C-program – bag scenen
En præprocessor er et systemprogram (et computerprogram, der er designet til at køre på computerens hardware og applikationsprogrammer). Den udfører forbehandling af højniveausprog(HLL). Forbehandlingen er det første trin i sprogbehandlingssystemet. Sprogbehandlingssystemet oversætter højniveausproget til maskinsprog eller absolut maskinkode(dvs. til den form, der kan forstås af maskinen).
- Forbehandleren kender ikke til C’s scope-regler. Forbehandlerdirektiver som #define træder i kraft, så snart de ses, og forbliver i kraft indtil slutningen af den fil, der indeholder dem; programmets blokstruktur er irrelevant.
En præprocessor udfører hovedsageligt tre opgaver på HLL-koden :
- Fjernelse af kommentarer : Den fjerner alle kommentarer. En kommentar er kun skrevet for at mennesker kan forstå koden. Så det er indlysende, at de ikke er til nogen nytte for en maskine. Så præprocessoren fjerner dem alle, da de ikke er nødvendige i udførelsen og ikke vil blive udført også.
Sådan kan man se en fil med fjernede kommentarer i linux) :
Skriv en C-kode (lad filnavnet være prog.c). Forbehandler den ved hjælp af kommandoen gcc -E prog.c
Du vil se output med koden uden kommentarer.
Denne fil gemmes med en ‘.i’-udvidelse (prog.i), som vil blive indtastet i compileren. - Filinklusion : Inkluderer alle de filer fra biblioteket, som vores program har brug for. I HLL skriver vi #include, som er et direktiv til præprocessoren, der fortæller den, at den skal inkludere indholdet af den angivne biblioteksfil. For eksempel vil #include fortælle præprocessoren, at den skal inkludere alt indholdet i biblioteksfilen stdio.h.
Dette kan også skrives med dobbelte anførselstegn – #include “stdio.h”
Bemærk: Hvis filnavnet er indesluttet i kantede parenteser, søges filen i standardcompilerens include-stier. Hvis filnavnet er omsluttet af dobbelte anførselstegn, udvides søgestien til at omfatte den aktuelle kildemappe. - Makroudvidelse : Makroer kan kaldes som små funktioner, der ikke er så overhead at behandle. Hvis vi skal skrive en funktion (med en lille definition), der skal kaldes rekursivt (igen og igen), bør vi foretrække en makro frem for en funktion.
Så defineres disse makroer af præprocessoren.#define SI 1000
er et simpelt eksempel på et makro.
- Der findes to typer makroer: Der findes to typer makroer: objektlignende (tager ikke parametre) og funktionslignende (kan tage parametre)
// object-like macro#define // function-like macro #define ()
- Du kan slette en makrodefinition med #undef:
// delete the macro# undef
- Vi kan skrive makroer på flere linjer på samme måde som funktion, men hver erklæring slutter med “\”.
#include <stdio.h>
#define MACRO(num, str) {\
printf
(
"%d"
, num);\
printf
(
" is"
);\
printf
(
" %s number"
, str);\
printf
(
"\n"
);\
}
- Der findes to typer makroer: Der findes to typer makroer: objektlignende (tager ikke parametre) og funktionslignende (kan tage parametre)
Denne artikel er bidraget af Diksha. Hvis du kan lide GeeksforGeeks og gerne vil bidrage, kan du også skrive en artikel ved hjælp af contribute.geeksforgeeks.org eller sende din artikel på mail til [email protected]. Se din artikel blive vist på GeeksforGeeks’ hovedside, og hjælp andre nørder.