Překlad programu
Pro překlad programu z jazyka C do spustitelného (executable) souboru budeme používat jiný program, kterému se říká překladač. Překladačů jazyka C existuje celá řada, my budeme využívat asi nejpoužívanější překladač pro Linuxové systémy s názvem GCC (GNU Compiler Collection).
Překladač gcc
, spolu s dalšími potřebnými nástroji, můžete na Ubuntu v terminálu nainstalovat
pomocí následujícího příkazu:
$ sudo apt install build-essential
Překlad prvního programu
Ještě než si ukážeme, jak vlastně programovací jazyk C funguje, tak zkusíme přeložit velmi jednoduchý
C program do spustitelného souboru a spustit jej.
Vytvořte soubor s názvem main.c
a nakopírujte do něj následující C kód (později si vysvětlíme,
jak tento kód funguje):
Tento program se nazývá
Hello world
, jelikož tento text vypíše na obrazovku. Podobný jednoduchý program je obvykle tím prvním, co programátor v nějakém novém programovacím jazyce vytvoří.
Nyní otevřete terminál (Ctrl + Alt + T
v Ubuntu) ve složce s tímto souborem, spusťte program
gcc
a předejte mu cestu k tomuto souboru:
$ gcc main.c -o program
Tímto příkazem řeknete "Gécécéčku", aby přeložil zdrojový soubor main.c
a uložil výsledný spustitelný
soubor do souboru program
. Pokud byste přepínač -o <nazev souboru>
nepoužili, tak se vytvoří spustitelný
soubor s názvem a.out
.
Na Windowsu spustitelné soubory mají obvykle příponu
.exe
, na Linuxu to však není běžnou praxí a spustitelné soubory typicky žádnou příponu nemají.
Pokud chcete nyní program spustit, stačí v terminálu zadat (relativní) cestu k danému spustitelnému souboru.
$ ./program
Hello world!
Program by měl na výstup vytisknout text Hello world!
.
Tipy pro práci s příkazovou řádkou
- Obvykle budete chtít po změně v programu provést překlad a pak program spustit. Abyste to provedli
v jednom terminálovém příkazu, můžete tyto dva příkazy spojit pomocí
&&
:
Pokud překlad proběhne úspěšně, tak operátor$ gcc main.c -o main && ./main
&&
zajistí spuštění následujícího příkazu. - Pokud nechcete příkazy v terminálu psát neustále dokola, šipkou nahoru (↑) můžete vyvolat nedávno spuštěné příkazy v terminálu.
Pro představu je k dispozici ještě shrnující video:
Jak překlad probíhá?
Překlad programu bude detailně vysvětlen v sekci o linkeru.
Ve zkratce: Překlad programů probíhá ve dvou hlavních fázích: překlad (translation) a linkování (linking). Dohromady se oboum těmto krokům také říká kompilace (compilation).
Při překladu překladač vezme každý C zdrojový soubor, který mu předložíme, a samostatně jej přeloží do tzv. objektového souboru (object file). Takovýto soubor obsahuje již přeložené instrukce pro procesor, ale není sám o sobě spustitelný, tj. nejedná se o program, ale pouze o přeložený binární kód.
Jakmile jsou všechny zdrojové soubory přeloženy do objektových souborů, tak přichází na řadu další program, tzv. linker, který tyto objektové soubory spojí dohromady, propojí je dle potřeby, případně k nim připojí externí knihovny a na konci vytvoří finální spustitelný soubor, který lze poté spustit.
Když použijete program gcc
způsobem, jaký jsme si ukázali výše, tak se na pozadí spustí překladač
a poté i linker a oba dva tyto kroky se tak provedou automaticky. Je ale možné provést je i separátně:
$ gcc -c main.c # vytvoří objektový soubor main.o
$ gcc main.o -o main # slinkování souboru main.o