logo

Proces kompilace v c

Co je to kompilace?

Kompilace je proces převodu zdrojového kódu na objektový kód. To se provádí pomocí kompilátoru. Kompilátor zkontroluje, zda ve zdrojovém kódu nejsou syntaktické nebo strukturální chyby, a pokud je zdrojový kód bezchybný, vygeneruje objektový kód.

Proces kompilace v c

Proces kompilace c převádí zdrojový kód přijatý jako vstup do objektového kódu nebo strojového kódu. Proces kompilace lze rozdělit do čtyř kroků, tj. Předzpracování, Kompilace, Sestavení a Propojení.

Preprocesor vezme zdrojový kód jako vstup a odstraní všechny komentáře ze zdrojového kódu. Preprocesor převezme direktivu preprocesoru a interpretuje ji. Například pokud , direktiva je k dispozici v programu, pak preprocesor interpretuje direktivu a nahradí ji obsahem 'stdio.h' soubor.

hashtable versus hashmap

Následují fáze, kterými náš program prochází, než se transformuje do spustitelné podoby:

    Preprocesor Kompilátor Assembler Linker
Proces kompilace v c

Preprocesor

Zdrojový kód je kód napsaný v textovém editoru a soubor zdrojového kódu má příponu '.c'. Tento zdrojový kód je nejprve předán preprocesoru a ten pak tento kód rozšíří. Po rozbalení kódu je rozbalený kód předán kompilátoru.

Kompilátor

Kód, který je expandován preprocesorem, je předán kompilátoru. Kompilátor převede tento kód na kód sestavení. Nebo můžeme říci, že kompilátor C převede předzpracovaný kód na kód sestavení.

Assembler

Kód sestavení je převeden na objektový kód pomocí assembleru. Název objektového souboru generovaného assemblerem je stejný jako zdrojový soubor. Přípona objektového souboru v systému DOS je '.obj' a v systému UNIX je přípona 'o'. Pokud je název zdrojového souboru 'Ahoj C', pak by název souboru objektu byl 'hello.obj'.

Linker

Především všechny programy napsané v C používají funkce knihovny. Tyto knihovní funkce jsou předkompilovány a objektový kód těchto knihovních souborů je uložen s příponou '.lib' (nebo '.a'). Hlavním úkolem linkeru je kombinovat objektový kód souborů knihovny s objektovým kódem našeho programu. Někdy nastane situace, kdy náš program odkazuje na funkce definované v jiných souborech; pak v tom hraje velmi důležitou roli linker. Propojí objektový kód těchto souborů s naším programem. Proto docházíme k závěru, že úkolem linkeru je propojit objektový kód našeho programu s objektovým kódem souborů knihovny a dalších souborů. Výstupem linkeru je spustitelný soubor. Název spustitelného souboru je stejný jako název zdrojového souboru, ale liší se pouze svými příponami. V DOSu je přípona spustitelného souboru '.exe' a v UNIXu může být spustitelný soubor pojmenován jako 'a.out'. Pokud například v programu používáme funkci printf(), pak linker přidá svůj přidružený kód do výstupního souboru.

Pojďme to pochopit na příkladu.

Ahoj C

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

Nyní vytvoříme vývojový diagram výše uvedeného programu:

Proces kompilace v c

Ve výše uvedeném vývojovém diagramu jsou provedeny následující kroky ke spuštění programu:

  • Za prvé, vstupní soubor, tj. Ahoj C, je předán preprocesoru a preprocesor převede zdrojový kód na rozšířený zdrojový kód. Rozšíření rozšířeného zdrojového kódu by bylo ahoj.i.
  • Rozšířený zdrojový kód je předán kompilátoru a kompilátor převede tento rozšířený zdrojový kód na kód sestavení. Rozšíření kódu sestavení by bylo ahoj.s
  • Tento kód sestavení je poté odeslán do assembleru, který převede kód sestavení na objektový kód.
  • Po vytvoření objektového kódu vytvoří linker spustitelný soubor. Zavaděč poté načte spustitelný soubor pro provedení.