logo

Compilatieproces in c

Wat is een compilatie?

De compilatie is een proces waarbij de broncode wordt omgezet in objectcode. Dit gebeurt met behulp van de compiler. De compiler controleert de broncode op syntactische of structurele fouten en als de broncode geen fouten bevat, genereert hij de objectcode.

Compilatieproces in c

Het c-compilatieproces converteert de broncode die als invoer is gebruikt naar de objectcode of machinecode. Het compilatieproces kan in vier stappen worden verdeeld, namelijk voorverwerking, compileren, assembleren en koppelen.

De preprocessor neemt de broncode als invoer en verwijdert alle opmerkingen uit de broncode. De preprocessor neemt de preprocessorrichtlijn en interpreteert deze. Bijvoorbeeld als , de richtlijn beschikbaar is in het programma, interpreteert de preprocessor de richtlijn en vervangt deze richtlijn door de inhoud van de 'stdio.h' bestand.

abstracte klasse in Java

Hieronder volgen de fasen die ons programma doorloopt voordat het wordt omgezet in een uitvoerbare vorm:

    Preprocessor Compiler Assembler Linker
Compilatieproces in c

Preprocessor

De broncode is de code die in een teksteditor is geschreven en het broncodebestand krijgt de extensie '.c'. Deze broncode wordt eerst doorgegeven aan de preprocessor, waarna de preprocessor deze code uitbreidt. Nadat de code is uitgebreid, wordt de uitgebreide code doorgegeven aan de compiler.

Compiler

De code die door de preprocessor wordt uitgebreid, wordt doorgegeven aan de compiler. De compiler zet deze code om in assemblagecode. Of we kunnen zeggen dat de C-compiler de voorbewerkte code omzet in assemblagecode.

Assembler

De assemblagecode wordt met behulp van een assembler omgezet in objectcode. De naam van het door de assembler gegenereerde objectbestand is dezelfde als het bronbestand. De extensie van het objectbestand in DOS is '.obj', en in UNIX is de extensie 'o'. Als de naam van het bronbestand 'hallo.c', dan zou de naam van het objectbestand 'hello.obj' zijn.

Linker

Hoofdzakelijk gebruiken alle programma's die in C zijn geschreven bibliotheekfuncties. Deze bibliotheekfuncties zijn vooraf gecompileerd en de objectcode van deze bibliotheekbestanden wordt opgeslagen met de extensie '.lib' (of '.a'). De belangrijkste werking van de linker is het combineren van de objectcode van bibliotheekbestanden met de objectcode van ons programma. Soms doet zich de situatie voor wanneer ons programma verwijst naar de functies die in andere bestanden zijn gedefinieerd; dan speelt linker hierin een zeer belangrijke rol. Het koppelt de objectcode van deze bestanden aan ons programma. Daarom concluderen we dat het de taak van de linker is om de objectcode van ons programma te koppelen aan de objectcode van de bibliotheekbestanden en andere bestanden. De uitvoer van de linker is het uitvoerbare bestand. De naam van het uitvoerbare bestand is dezelfde als die van het bronbestand, maar verschilt alleen in de extensies. In DOS is de extensie van het uitvoerbare bestand '.exe', en in UNIX kan het uitvoerbare bestand de naam 'a.out' krijgen. Als we bijvoorbeeld de functie printf() in een programma gebruiken, voegt de linker de bijbehorende code toe aan een uitvoerbestand.

Laten we het begrijpen aan de hand van een voorbeeld.

hallo.c

 #include int main() { printf('Hello javaTpoint'); return 0; } 

Nu gaan we een stroomdiagram maken van het bovenstaande programma:

Compilatieproces in c

In het bovenstaande stroomdiagram worden de volgende stappen genomen om een ​​programma uit te voeren:

  • Ten eerste het invoerbestand, d.w.z. hallo.c, wordt doorgegeven aan de preprocessor, en de preprocessor converteert de broncode naar uitgebreide broncode. De uitbreiding van de uitgebreide broncode zou zijn Hallo ik.
  • De uitgebreide broncode wordt doorgegeven aan de compiler, en de compiler converteert deze uitgebreide broncode naar assemblagecode. De uitbreiding van de assemblagecode zou zijn hallo.s.
  • Deze assemblagecode wordt vervolgens naar de assembler gestuurd, die de assemblagecode omzet in objectcode.
  • Na het aanmaken van een objectcode maakt de linker het uitvoerbare bestand aan. De lader laadt vervolgens het uitvoerbare bestand voor uitvoering.