Je hebt functies geschreven die werken. De rand -generator en het bubble_sort -algoritme zijn solide. Nu heb je ze ergens anders nodig. Code kopiëren en plakken is rommelig. Het creëert bugs. Het maakt onderhoud tot een nachtmerrie.
De oplossing is een hulpprogrammabibliotheek.
In C is een bibliotheek geen magische doos. Het zijn twee specifieke bestanden die samenwerken: een header (.h ) en een broncode (.c ). De header vertelt de compiler wat er beschikbaar is. Het bronbestand bevat de feitelijke logica.
Hier ziet u hoe u een eenvoudige C-bibliotheek structureert om uw code schoon en modulair te houden.
De interface definiëren
Elke publieke functie heeft een verklaring nodig. Dit bevindt zich in het headerbestand.
Maak een bestand met de naam util.h.
Die lijnen zijn functionele prototypes. Het trefwoord ‘extern’ is belangrijk. Het vertelt de compiler: “Deze functie bestaat, maar ik weet nog niet waar. Ik zal hem later tijdens het linken vinden.”
Als u een zeer ouderwetse C-compiler gebruikt, moet u mogelijk de parameternamen uit bubble_sort verwijderen. Moderne standaarden geven de voorkeur aan volledige prototypes, maar oude code verwijdert deze vaak.
De logica implementeren
Nu het zware werk. Maak util.c.
Let op de insluiting. Je gebruikt aanhalingstekens (“”util.h”) in plaats van punthaken (
Er is hier een subtiele beveiligingsfunctie. De variabele rand_seed wordt gedefinieerd in het .c -bestand, maar niet in het .h -bestand. Dit is het verbergen van informatie.
Programma’s die util.h bevatten, kennen rand(). Ze weten niets van rand_seed. Ze kunnen het zaad niet per ongeluk wijzigen. Als u dit strikt wilt afdwingen, kunt u het trefwoord static vóór int rand_seed toevoegen. Hierdoor wordt de variabele alleen zichtbaar binnen dit enkele bestand.
De bibliotheek gebruiken
Uw hoofdprogramma heeft geen implementatie nodig. Het heeft alleen de interface nodig.
Maak main.c.
Het voordeel is onmiddellijk. De hoofdlogica is korter. U vervuilt uw primaire code niet met sorteeralgoritmen of willekeurige nummergeneratoren. Je belt ze gewoon.
Compileren en koppelen
Dit is waar de meeste beginners struikelen. Als u afzonderlijke objectbestanden wilt, kunt u niet alles in één keer compileren. Je moet apart compileren en dan linken.
Ervan uitgaande dat u zich op een UNIX-achtig systeem bevindt, is hier de workflow.
Compileer eerst de bibliotheekbron in een objectbestand.
De -c vlag vertelt GCC om te compileren, maar niet om te linken. Het stopt na het maken van machinecode. De vlag -g voegt debug-symbolen toe, wat handig is als er iets misgaat. Het resultaat is util.o. Dit bestand bevat de gecompileerde machinecode voor rand en bubble_sort. Het kan niet op zichzelf draaien omdat het geen ‘hoofd’-functie heeft.
Compileer vervolgens uw hoofdprogramma.
Dit levert main.o op. Nogmaals, dit is slechts machinecode. Het is nog geen uitvoerbaar bestand.
Koppel ze ten slotte aan elkaar.
Deze opdracht neemt main.o en util.o en voegt deze samen in één uitvoerbaar bestand met de naam main.
Voer het uit met:
U ziet een lijst met tien willekeurige getallen, gevolgd door een streepjesscheidingsteken, gevolgd door de gesorteerde lijst.
Waarom dit belangrijk is
Je zou je kunnen afvragen: waarom zou je je druk maken over deze extra stap? Waarom plak je de functies niet gewoon in main.c?
Omdat bibliotheken schaalbaar zijn. Naarmate uw projecten groeien, beschikt u over tientallen nutsfuncties. Door ze in afzonderlijke bestanden te bewaren, kunt u ze in verschillende projecten hergebruiken



















