compilatieproces in c
Wat is een compilatie?
de compilatie is een proces om de broncode om te zetten in objectcode. Het wordt gedaan met de hulp van de compiler. De compiler controleert de broncode voor de syntactische of structurele fouten, en als de broncode foutloos is, dan genereert het de objectcode.
het compilatieproces C converteert de broncode die als invoer wordt gebruikt naar de objectcode of machinecode. Het compilatieproces kan worden onderverdeeld in vier stappen, d.w.z., Pre-processing, compileren, assembleren en koppelen.
de preprocessor neemt de broncode als invoer en verwijdert alle opmerkingen van de broncode. De preprocessor neemt de preprocessor directive en interpreteert het. Bijvoorbeeld, if <stdio.h>, de richtlijn is beschikbaar in het programma, vervolgens interpreteert de preprocessor de richtlijn en vervangt deze richtlijn door de inhoud van de ” stdio.h ‘ file.
de volgende fasen zijn de fasen die ons programma doorlopen voordat het wordt omgezet in een uitvoerbare vorm:
- Preprocessor
- Compiler
- Assembler
- Linker
Preprocessor
de broncode is de code die in een teksteditor is geschreven en het broncodebestand krijgt een extensie”.c”. Deze broncode wordt eerst doorgegeven aan de preprocessor, en dan breidt de preprocessor deze code uit. Na het uitbreiden van de code wordt de uitgebreide code doorgegeven aan de compiler.
Compiler
de code die wordt uitgebreid door de preprocessor wordt doorgegeven aan de compiler. De compiler zet deze code om in assembly code. Of we kunnen zeggen dat de C-compiler de vooraf verwerkte code omzet in assemblage code.
Assembler
de assemble-code wordt omgezet in objectcode met behulp van een assembler. De naam van het objectbestand gegenereerd door de assembler is hetzelfde als het bronbestand. De extensie van het objectbestand in DOS is’.obj, ‘en in UNIX, de extensie is ‘o’. Als de naam van het bronbestand ‘ Hallo.c’, dan zou de naam van het objectbestand ‘Hallo.obj”.
Linker
hoofdzakelijk gebruiken alle in C geschreven programma ‘ s bibliotheekfuncties. Deze bibliotheekfuncties zijn voorgecompileerd, en de objectcode van deze bibliotheekbestanden wordt opgeslagen met ‘.lib” (of”.a) verlenging. Het belangrijkste werk van de linker is om de objectcode van bibliotheekbestanden te combineren met de objectcode van ons programma. Soms ontstaat de situatie 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 hetzelfde als het bronbestand, maar verschilt alleen in hun extensies. In DOS is de extensie van het uitvoerbare bestand ‘.exe’, en in UNIX, het uitvoerbare bestand kan worden genoemd als ‘A. out’. Als we bijvoorbeeld de functie printf() in een programma gebruiken, voegt de linker de bijbehorende code toe in een uitvoerbestand.
laten we het begrijpen door middel van een voorbeeld.
Hallo.c
nu maken we een stroomdiagram van het bovenstaande programma:
in het bovenstaande stroomdiagram worden de volgende stappen genomen om een programma uit te voeren:
- Ten eerste, het invoerbestand, dat wil zeggen, hallo.c, wordt doorgegeven aan de preprocessor, en de preprocessor converteert de broncode in uitgebreide broncode. De uitbreiding van de uitgebreide broncode zou Hallo zijn.i.
- de uitgebreide broncode wordt doorgegeven aan de compiler, en de compiler converteert deze uitgebreide broncode naar assemblagecode. De uitbreiding van de montagecode zou Hallo zijn.s.
- deze assemble-code wordt vervolgens naar de assembler gestuurd, die de assemble-code omzet in objectcode.
- na het aanmaken van een objectcode maakt de linker het uitvoerbare bestand aan. De lader laadt dan het uitvoerbare bestand voor de uitvoering.