% Kompilace, linkování a spuštění programu, překladač, proměnné, definice % proměnné, způsob uchování informace v programu
\setcounter{section}{20}
- není možné zdrojový kód přímo spustit
$\rightarrow$ potřeba převést na strojový kód - kompilace a linkování
\begin{table}[htbp]
\centering
\def\arraystretch{1.5}
\begin{tabularx}{0.95\textwidth}{>{\centering\arraybackslash}m{0.35\textwidth}>{\centering\arraybackslash}m{0.15\textwidth}C}
\toprule
Zdrojový kód
- vytváření objektových souborů z zdrojových souborů
- prováděno překladačem (kompilátor)
- gcc, clang, intel c++ compiler, mono, Gc, javac OpenJDK\dots
- několik kroků, např
- line reconstruction
- preprocessing
- lexikální analýza
- syntaktická analýza / parsování
- sématická analýza
- další -- optimalizace, analýza, vytváření kódu\dots
- typy
- source-to-source -- překlad high-level jazyka do high-level jazyka
- bytecode -- kompilace do assembly teoretického stroje
- just-in-time compilers -- kompilace během spuštění; Python, JavaScript, Java, .NET\dots
- hardware compilers
- assembler -- převod assembly do strojového kódu
- \dots
- spuštění
- z IDE
- ruční spuštění příkazů -- cmd, bash
- automatické systémy -- make, cmake
- seskupení objektových souborů a vytvoření jednoho spustitelného souboru, knihovny nebo objektu
- prováděno linkerem
- hledání dependencies, importování libraries, nastavení entry pointu\dots
- statické a dynamické linkování
- statické -- všechen potřebný kód v rámci executable, větší velikost souboru
- dynamické -- některé symboly nalezeny až při spuštění programu v operačním systému, menší velikost, potřeba nainstalovat externí knihovny
- způsob uložení dat v programu
- na hodnotu ukazuje symbolické jméno
- specifikace typu dat -- int, string, float, char, bool, double\dots
- konstanty -- keyword \inlistc{const} -- nelze měnit v průběhu programu
- \inlistc{signed}, \inlistc{unsigned} -- specifikace čísel s/bez znamének, keyword před data typem
- další data typy, než ty zmíněny v
tabulce\ref{21datatypes}, definovány ve standardních C knihovnách
\begin{table}[htbp]
\centering
\def\arraystretch{1.25}
\begin{tabularx}{0.95\textwidth}{>{\centering\arraybackslash}m{0.2\textwidth}C>{\centering\arraybackslash}m{0.1\textwidth}>{\centering\arraybackslash}m{0.15\textwidth}}
\toprule
Typ & Vysvětlení & Min. velikost (bity) & Formátování\\
\midrule
\inlistc{char} & nejmenší adresovatelná jednotka uchovávající znak; vnitřně číslo & 8 & \inlistc{%c}\\
\inlistc{signed char} & stejné jako char, garance znaménka, hodnoty bitů & & \inlistc{%f}\\
\inlistc{double} & větší reálné číslo s desetinnými čísly, na většině systémech 64bitů & & \inlistc{%lf}\\
\inlistc{long double} & velké reálné číslo s desetinnými čísly; 80, 96 nebo 128bitů & & \inlistc{%Lf}\\
\bottomrule
\end{tabularx}
\caption{Data typy vC~standartu}
\label{21datatypes}
\end{table}
- formát \uv{\inlistc{ ;}}
- \inlistc{int i;}
- \inlistc{char c, ch;}
- \inlistc{float f=0.5f, ch;}
- při specifikování proměnné se alokuje místo v paměti
- čtení/zápis dat následně z paměti na místě adresy
- pointer -- adresa proměnné