Napsal jsi funkce, které fungují. Generátor rand a algoritmus bubble_sort jsou spolehlivé. Nyní je musíte použít na jiných místech. Kopírování a vkládání kódu je nepořádek. To vytváří chyby. To dělá z podpory noční můru.
Řešením je knihovna utilit.
V C není knihovna kouzelná skříňka. Jedná se o dva specifické soubory, které spolupracují: hlavičkový soubor (.h ) a zdrojový soubor (.c ). Soubor záhlaví informuje kompilátor, co je k dispozici. Zdrojový soubor obsahuje samotnou logiku.
Zde je návod, jak strukturovat základní knihovnu C, aby byl váš kód čistý a modulární.
Definice rozhraní
Každá veřejná funkce musí mít deklaraci. Je v záhlaví souboru.
Vytvořte soubor s názvem util.h.
Tyto linky jsou funkčními prototypy. Důležité je klíčové slovo „externí“. Kompilátoru to říká: “Tato funkce existuje, ale zatím nevím kde. Najdu ji později během fáze propojení.”
Pokud používáte velmi starý kompilátor C, možná budete muset odstranit názvy parametrů z bubble_sort. Moderní standardy upřednostňují úplné prototypy, ale starší kód je často odstraňuje.
Implementace logiky
Nyní k nejtěžší části. Vytvořte util.c.
Věnujte pozornost připojení. Používáte uvozovky ("util.h" ) spíše než lomené závorky ( ). Lomené závorky jsou vyhrazeny pro systémové knihovny umístěné ve standardních adresářích. Uvozovky říkají kompilátoru, aby hledal soubor v aktuálním adresáři.
Je zde jemný bezpečnostní prvek. Proměnná rand_seed je definována v souboru .c, ale ne v souboru .h. Toto je skrývání informací.
Programy, které obsahují util.h vědí o rand(). Nevědí o rand_seed. Nemohou náhodně změnit semeno. Pokud to chcete striktně vynutit, můžete přidat klíčové slovo static před int rand_seed. Díky tomu bude proměnná viditelná pouze v tomto jediném souboru.
Používání knihovny
Váš hlavní program nemusí být implementován. Potřebuje pouze rozhraní.
Vytvořte main.c.
Výhoda je zřejmá. Základní logika se zkrátí. Nezatěžujete hlavní kód třídicími algoritmy nebo generátory náhodných čísel. Jednoduše je zavoláte.
Kompilace a propojení
Tady narazí většina nováčků. Nemůžete zkompilovat vše najednou, pokud chcete získat samostatné objektové soubory. Musíte je zkompilovat samostatně a poté je propojit.
Za předpokladu, že používáte systém podobný UNIXu, zde je pracovní postup.
Nejprve zkompilujte zdrojový kód knihovny do objektového souboru.
Příznak -c říká GCC, aby zkompiloval, ale nepropojil. Po vygenerování strojového kódu se zastaví. Příznak -g přidává ladicí symboly, což je užitečné, pokud se něco pokazí. Výsledkem bude soubor util.o. Tento soubor obsahuje zkompilovaný strojový kód pro rand a bubble_sort. Nemůže se spustit samostatně, protože postrádá funkci main.
Poté zkompilujte svůj hlavní program.
Tím se vytvoří soubor main.o. Opět se jedná pouze o strojový kód. Toto ještě není spustitelný soubor.
Nakonec je spojte dohromady.
Tento příkaz vezme main.o a util.o a spojí je do jednoho spustitelného souboru s názvem main.
Spusťte to pomocí:
Zobrazí se seznam deseti náhodných čísel následovaný oddělovačem pomlček a poté seřazeným seznamem.
Proč je to důležité?
Můžete se ptát: Proč se obtěžovat tímto krokem navíc? Proč prostě nevložit funkce do main.c?
Protože knihovny se zvětšují. Jak budou vaše projekty růst, budete mít desítky užitných funkcí. Uložením do samostatných souborů je můžete znovu použít v různých projektech.


















