short, int, long, long longsigned) - umí uložit i záporné hodnoty, používá se doplňkový kódunsigned) - jen kladné hodnoty, přímý kódfloat, double, long doublechar - zároveň slouží jako paměťově nejmenší celočíselný typ (vhodné např. pro optimalizaci, i když data v něm uložená nejsou textové znaky)bool - true/false#include <stdbool.h>, od C23 existuje nativněstd::vector<bool> nebo std::bitset<>| Klíčové slovo | Obvyklá paměť (64-bit PC) | Garantované minimum standardem | Rozsah hodnot (pro 64-bit PC) |
|---|---|---|---|
bool |
1 Byte | 1 Byte | 0 (false) až 1 (true) |
char |
1 Byte | 1 Byte | -128 až 127 |
unsigned char |
1 Byte | 1 Byte | 0 až 255 |
short |
2 Byte | 2 Byte (16 bitů) | -32 768 až 32 767 |
unsigned short |
2 Byte | 2 Byte (16 bitů) | 0 až 65 535 |
int |
4 Byte | 2 Byte (16 bitů) | -2 147 483 648 až 2 147 483 647 |
unsigned int |
4 Byte | 2 Byte (16 bitů) | 0 až 4 294 967 295 |
long |
8 Byte (Linux) / 4 Byte (Win) | 4 Byte (32 bitů) | dle architektury (typicky jako long long na Linuxu) |
unsigned long |
8 Byte (Linux) / 4 Byte (Win) | 4 Byte (32 bitů) | dle architektury |
long long |
8 Byte | 8 Byte (64 bitů) | -9 223 372 036 854 775 808 až |
float |
4 Byte | 4 Byte | |
double |
8 Byte | 8 Byte | |
long double |
16 Byte (často jen 10B reálně) | double |
|
void |
Nemá smysl | Nemá smysl | Typ reprezentuje prázdnou množinu hodnot |
Zatímco C++ má obří standardní knihovnu (STL) plnou kontejnerů jako std::vector, std::map nebo std::list, jazyk C žádné vestavěné kontejnery nemá.
int cisla[10]struct Uzivatel { int id; char jmeno[50]; float kredit; };structu, ale ukládá více datových typů na jedno místounion Kontakt { char email[50]; int telefon; };intenum Level { LOW = 25, MEDIUM = 50, HIGH = 75 };& = reference, zjištění adresy v paměti* (při deklaraci) = označuje proměnnou jako pointer* (v kódu) = dereference, zjištění hodnoty na adreseVzniknou běžnou deklarací
Velikost paměti se rozhodne už při kompilaci programu na základě datového typu
Z hlediska uložení v RAM a životnosti ji ale musíme rozlišit na dva typy:
int x;, char pole[100];)static..data segment - pro proměnné inicializované na nenulovou hodnotu (např. static int data[5] = {1,2,3,4,5}; )
.bss segment – pro neinicializované proměnné (OS je při spuštění vynuluje) (např. static int data[5];)Výhody: Extrémně rychlé, bezpečné (nedochází k memory leakům, uvolní se automaticky)
Nevýhody: Nutné znát velikost předem (např. u pole), zásobník má omezenou velikost (může dojít ke Stack Overflow)
Ukládají se na haldu (heap)
Vzniknou dynamicky za běhu programu
Programátor si o paměť musí říct sám int *pole = malloc() a poté ji uvolnit free(pole)
Výhody: Flexibilita (velikost se určuje za běhu), obrovská kapacita (omezená prakticky velikostí RAM)
Nevýhody: Pomalejší než stack, bez uvolnění zůstane blokovaná až do ukončení programu (Memory Leak)
Dynamicky alokovaná struktura
Každý prvek obsahuje hodnotu a ukazatel na další prvek (případně i/jen předchozí)
Lze ukládat předem neznámý objem dat
Nelze jednoduše indexovat, lze ale libovolně přidávat/odebírat z jakékoliv pozice v seznamu
Přidání malloc() a update pointeru
Find
Odebrání
Část programu, která poskytuje určitou funkcionalitu pro zbytek programu
"Black box s veřejným interfacem"
Modul má dvě části:
.h/.hpp.c/.cppPosloupnost příkazů uložených v paměti programu
"Podprogram", který řeší dílčí problém
Může mít vstupní parametry, případně něco vracet
Procedura - nic nevrací, typu void, jen provede posloupnost příkazů
Funkce - má návratovou hodnotu
typ jméno (seznam parametrů) { tělo }
returnPři spuštění kompilace, např. gcc main.c -o program.out, proběhnou 4 fáze:
Pouze textově upravuje zdrojový kód na základě direktiv začínajících #
Vloží deklarace funkcí z knihoven #include
Nahradí makra #define
Vymaže části podmíněného překladu #ifdef
Vymaže všechny komentáře
Výstupem je soubor s příponou .i
Překládá vyšší programovací jazyk do nižšího
Vezme čistý C kód, zkontroluje syntaxi
Přeloží do jazyka Assembleru, specifický pro danou architekturu
Provádí optimalizace kódu
int sekundy_v_tydnu = 60 * 60 * 24 * 7; na int sekundy_v_tydnu = 604800;)for (int i = 0; i < 3; i++) { printf("Ahoj"); } na printf("Ahoj"); printf("Ahoj"); printf("Ahoj");)int add(int a, int b) { return a+b; }; int vysledek = add(5,10); na int vysledek = 5 + 10;)Výstupem soubor .s (často se ale ani neukládá na disk, rovnou se předá assembleru a výstupem je ˙.o˙)
Převede textový soubor v Assembleru do čisté binární formy
Výstup obsahuje strojový kód, ale nelze ještě spustit
Výstupem soubor .o
Vezme všechny objektové .o soubory a spojí je dohromady
Nalinkuje potřebné knihovny
Statické knihovny
.a, ve Windows .libDynamické knihovny
.so, ve Windows .dllVýstupem spustitelný soubor, na Linuxu bez přípony nebo .out, na Windows .exe
gcc -g a vypnutou optimalizací gcc -O0
Vytvořeno: 9. 6. 2026, 13:06
Poslední aktualizace: 9. 6. 2026, 13:09