GeeksforGeeks

Kompilering av ett C-program – bakom scenen

En preprocessor är en systemprogramvara (ett datorprogram som är utformat för att köras på datorns maskinvara och tillämpningsprogram). Den utför förbehandling av högnivåspråket (HLL). Förbehandlingen är det första steget i språkbehandlingssystemet. Språkbehandlingssystemet översätter högnivåspråket till maskinspråk eller absolut maskinkod (dvs. till en form som kan förstås av en maskin).

  • Förberedaren känner inte till C:s scope-regler. Förberedardirektiv som #define träder i kraft så snart de ses och förblir i kraft till slutet av den fil som innehåller dem; programmets blockstruktur är irrelevant.
  • En preprocessor utför huvudsakligen tre uppgifter på HLL-koden :

  1. Ta bort kommentarer : Den tar bort alla kommentarer. En kommentar skrivs endast för att människor ska kunna förstå koden. Det är alltså uppenbart att de inte är till någon nytta för en maskin. Så preprocessorn tar bort alla eftersom de inte behövs i utförandet och inte heller kommer att exekveras.

    Så här ser du en fil med borttagna kommentarer i linux) :
    Skriv en C-kod (låt filnamnet vara prog.c). Förbehandla den med kommandot gcc -E prog.c


    Du kommer att se utmatningen med koden utan kommentarer.

    Denna fil sparas med ändelsen ’.i’ (prog.i) som kommer att användas av kompilatorn.

  2. File inclusion : Inkluderar alla filer från biblioteket som vårt program behöver. I HLL skriver vi #include som är ett direktiv för preprocessorn som talar om för den att inkludera innehållet i den angivna biblioteksfilen. Till exempel kommer #include att tala om för preprocessorn att inkludera allt innehåll i biblioteksfilen stdio.h.
    Detta kan också skrivas med hjälp av dubbla citationstecken – #include ”stdio.h”
    Observera: Om filnamnet är inneslutet inom hakparenteser söks filen upp i standardkompilatorns include-sökvägar. Om filnamnet är inneslutet inom dubbla citattecken expanderas sökvägen till att inkludera den aktuella källkatalogen.
  3. Makroexpansion : Makroer kan anropas som små funktioner som inte är lika overhead att bearbeta. Om vi måste skriva en funktion (med en liten definition) som måste anropas rekursivt (om och om igen) bör vi föredra ett makro framför en funktion.
    Så, definitionen av dessa makron görs av preprocessorn.
    #define SI 1000

    är ett enkelt exempel på ett makro.

    • Det finns två typer av makron: Det finns två typer av makro: objektliknande (tar inte emot parametrar) och funktionsliknande (kan ta emot parametrar)
      // object-like macro#define // function-like macro #define () 
    • Du kan radera en makrodefinition med #undef:
      // delete the macro# undef 
    • Vi kan skriva ett makro med flera rader på samma sätt som en funktion, men varje uttalande avslutas med ”\”.

      #include <stdio.h>
      #define MACRO(num, str) {\
      printf("%d", num);\
      printf(" is");\
      printf(" %s number", str);\
      printf("\n");\
      }

      
      

      
      

Denna artikel är ett bidrag från Diksha. Om du gillar GeeksforGeeks och vill bidra kan du också skriva en artikel via contribute.geeksforgeeks.org eller maila din artikel till [email protected]. Se din artikel dyka upp på GeeksforGeeks huvudsida och hjälp andra Geeks.

Lämna ett svar

Din e-postadress kommer inte publiceras.