Kompilace je proces, při kterém se zdrojový kód napsaný v programovacím jazyce (například C, C++, C#) převádí do jiné formy, kterou dokáže počítač přímo vykonat nebo kterou lze dále zpracovávat. Typicky se jedná o převod do:
- strojového kódu (machine code) – instrukce přímo spustitelné procesorem,
- mezikódu (intermediate code) – jazyk nezávislý na konkrétní architektuře,
- bytecode – spustitelný na virtuálním stroji.
Účel kompilace:
- detekce chyb ve zdrojovém kódu,
- optimalizace kódu,
- překlad do formy vhodné pro běh aplikace.
Životní cyklus aplikace zahrnuje dvě fáze:
- Compile time – doba, kdy je aplikace překládána z programového kódu do spustitelné podoby.
- Runtime – doba, kdy je aplikace spuštěná a vykonává svou činnost.
Kompilace v C
Kompilace v C probíhá v několika krocích:
- Preprocesor
- Zpracuje příkazy začínající znakem
#(například#include). - Vloží obsah hlavičkových souborů.
- Nahrazuje makra.
- Zpracuje příkazy začínající znakem
- Kompilátor
- Přeloží kód do assembleru, což je jazyk blízký strojovému kódu.
- Asembler
- Převede assembler do objektového kódu (soubory s příponou
.objnebo.o).
- Převede assembler do objektového kódu (soubory s příponou
- Linker
- Spojí všechny části programu dohromady a vytvoří jeden spustitelný soubor (například
.exe).
- Spojí všechny části programu dohromady a vytvoří jeden spustitelný soubor (například
Výsledek: → Spustitelný program, který lze rovnou spustit na konkrétním systému.
Info
Zkompilovaný program je možné spustit jen na konkrétním systému, pro který byl program zkompilován.

Kompilace v C#
U jazyka C# je situace trochu jiná.
- Kód se nepřekládá hned do strojového kódu.
- Místo toho se překládá do CIL kódu (Common Intermediate Language), což je mezikód, který není vázaný na konkrétní procesor nebo operační systém.
- Tento IL kód se uloží do souborů
.dllnebo.exe.
Příklad IL instrukce:
ldstr "Hello world"
call void [System.Console]System.Console::WriteLine(string)

Spuštění programu
- Když se spustí program, JIT kompilátor (Just-In-Time) přeloží IL kód do strojového kódu až za běhu.
- Díky tomu může být kód optimalizovaný přímo pro konkrétní počítač.
- Pokud dochází k opětovnému běhu nějaké části programu a je vyhodnoceno, že by jí mělo být možné optimalizovat, tak se tak učiní přímo za běhu bez nutnosti restartu aplikace.
AOT kompilace
Novější verze .NET (.NET 6+) umožňují tzv. AOT kompilaci (Ahead-of-Time).
- Překládají IL kód dopředu do nativního strojového kódu ještě před spuštěním.
- Program pak startuje rychleji a nepotřebuje tolik .NET runtime.
Nevýhoda:
- Některé dynamické funkce (například reflexe) mohou být omezené.