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.