C je zkrácený jazyk. Poskytuje přístup k „modrému kovu“ (hardwaru). Nemá ani funkci čtení z klávesnice nebo psaní obrazovky. Pokud to potřebujete, měli byste to implementovat sami.
Cokoli nad absolutní minimum je v knihovnách.
Znáte knihovnu stdio. Zvládá standardní vstup a výstup. Existují další knihovny pro matematiku. Zpracování řetězce. Funguje v průběhu času. Existují proto, abyste nemuseli znovu vynalézat kolo pokaždé, když začínáte nový projekt.
Proč se ale zastavit u toho, co standard poskytuje?
Umístěním kódu do knihoven je znovu použitelný. To vám umožní rozdělit velké programy do spravovatelných modulů. Jednodušší na testování. Snazší ladění. Můžete vzít kód ze svých starých projektů a vložit jej do nových, aniž byste museli kopírovat a vkládat bloky logiky.
Podívejme se, jak to udělat.
Extrahování logiky do funkcí
Vezměme si standardní C program, který naplní pole náhodnými čísly a seřadí je. Zde je zdrojový kód:
Tento kód dělá tři věci. Vyplní pole náhodnými čísly. Třídí je pomocí bublinového třídění. Zobrazí výsledek.
Abychom vytvořili znovu použitelnou knihovnu, musíme izolovat logiku řazení.
Krok 1: Zobecnění řazení
Extrahujte kód řazení bublin. Proměňte to ve funkci.
Protože pole a a konstanta MAX jsou globální, funkce zpočátku nepotřebuje parametry. Také by nemělo vracet hodnotu. Stačí použít místní proměnné pro x, y a t.
Nyní aktualizujte main, aby volal tuto funkci místo provádění inline smyčky.
Funguje to. Ale stále je vázána na globální pole.
Krok dva: Předání pole
Funkci řazení můžeme udělat skutečně univerzální. Předejte samotné pole jako parametr.
Podpis se změní na:
To říká kompilátoru, aby přijal celé pole libovolné velikosti. Tělo funkce zůstává úplně stejné. Stačí aktualizovat hovor v main :
Všimli jste si něčeho divného? Míjíme a spíše než &a.
I když funkce řazení upravuje pole, nepotřebujeme zde operátor get address. Zdá se to neintuitivní, pokud jste zvyklí na jazyky s předávanou hodnotou. Možná se divíte, proč to funguje bez explicitního použití ukazatelů ve volání.
Je to proto, že v jazyce C se pole při předání funkcím stávají ukazateli. Funkce obdrží odkaz na začátek pole v paměti. Proto dokáže změnit původní data.
Pochopení tohoto rozdílu je klíčem ke zvládnutí ukazatelů. Bez toho jsou knihovny C jen statické bloky kódu. S ním stavíte modulární, přenosné systémy.























