Sie haben Funktionen geschrieben, die funktionieren. Der „rand“-Generator und der „bubble_sort“-Algorithmus sind solide. Jetzt brauchen Sie sie woanders. Das Kopieren und Einfügen von Code ist chaotisch. Es entstehen Fehler. Dadurch wird die Wartung zum Albtraum.
Die Lösung ist eine Utility-Bibliothek.
In C ist eine Bibliothek keine Zauberkiste. Es handelt sich um zwei spezifische Dateien, die zusammenarbeiten: ein Header (.h ) und eine Quelle (.c ). Der Header teilt dem Compiler mit, was verfügbar ist. Die Quelldatei enthält die eigentliche Logik.
So strukturieren Sie eine grundlegende C-Bibliothek, um Ihren Code sauber und modular zu halten.
Definieren der Schnittstelle
Jede öffentliche Funktion benötigt eine Erklärung. Dies befindet sich in der Header-Datei.
Erstellen Sie eine Datei mit dem Namen util.h.
„c
/ util.h /
extern int rand();
extern void bubble_sort(int, int []);
„
Diese Zeilen sind Funktionsprototypen. Das Schlüsselwort „extern“ ist wichtig. Es teilt dem Compiler mit: „Diese Funktion existiert, aber ich weiß noch nicht wo. Ich werde sie später beim Verknüpfen finden.“
Wenn Sie einen sehr alten C-Compiler verwenden, müssen Sie möglicherweise die Parameternamen aus „bubble_sort“ entfernen. Moderne Standards bevorzugen vollständige Prototypen, aber Legacy-Code entfernt sie oft.
Implementierung der Logik
Nun zum schweren Heben. Erstellen Sie util.c.
„c
/ util.c /
int rand_seed=10;
/ von K&R – erzeugt eine Zufallszahl zwischen 0 und 32767. /
int rand() {
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}
void bubble_sort(int m,int a[]) {
int x,y,t;
für (x=0; x < m-1; x++)
für (y=0; y < m-x-1; y++)
if (a[y] > a[y+1]) {
t=a[y];
a[y]=a[y+1];
a[y+1]=t;
}
}
„
Beachten Sie die Einbeziehung. Sie verwenden Anführungszeichen („util.h“`) anstelle von spitzen Klammern („
Hier gibt es eine subtile Sicherheitsfunktion. Die Variable „rand_seed“ ist in der „.c“-Datei definiert, aber nicht in der „.h“-Datei. Hier werden Informationen versteckt.
Programme, die „util.h“ enthalten, kennen „rand()“. Sie wissen nichts über „rand_seed“. Sie können den Samen nicht versehentlich verändern. Wenn Sie dies strikt durchsetzen möchten, können Sie das Schlüsselwort „static“ vor „int rand_seed“ hinzufügen. Dadurch wird die Variable nur innerhalb dieser einzelnen Datei sichtbar.
Nutzung der Bibliothek
Ihr Hauptprogramm benötigt keine Implementierung. Es braucht nur die Schnittstelle.
Erstellen Sie main.c.
„c
int a[MAX];
void main() {
int i,t,x,y;
/ Array füllen /
für (i=0; i < MAX; i++) {
a[i]=rand();
printf("%d\n",a[i]);
}
bubble_sort(MAX,a);
/ sortiertes Array drucken /
printf(“——————–\n”);
für (i=0; i < MAX; i++)
printf("%d\n",a[i]);
}
„
Der Nutzen ist unmittelbar. Die Hauptlogik ist kürzer. Sie überladen Ihren Primärcode nicht mit Sortieralgorithmen oder Zufallszahlengeneratoren. Du rufst sie einfach an.
Kompilieren und Verknüpfen
Hier stolpern die meisten Anfänger. Sie können nicht alles auf einmal kompilieren, wenn Sie separate Objektdateien benötigen. Sie müssen separat kompilieren und dann verknüpfen.
Vorausgesetzt, Sie verwenden ein UNIX-ähnliches System, ist hier der Arbeitsablauf.
Kompilieren Sie zunächst die Bibliotheksquelle in eine Objektdatei.
„Bash
gcc -c -g util.c
„
Das Flag „-c“ weist GCC an, zu kompilieren, aber nicht zu verknüpfen. Es stoppt, nachdem Maschinencode erstellt wurde. Das Flag „-g“ fügt Debug-Symbole hinzu, was nützlich ist, wenn etwas schief geht. Das Ergebnis ist util.o. Diese Datei enthält den kompilierten Maschinencode für „rand“ und „bubble_sort“. Es kann nicht eigenständig ausgeführt werden, da ihm eine „Haupt“-Funktion fehlt.
Als nächstes kompilieren Sie Ihr Hauptprogramm.
„Bash
gcc -c -g main.c
„
Dies erzeugt main.o. Auch dies ist nur Maschinencode. Es ist noch keine ausführbare Datei.
Verknüpfen Sie sie schließlich miteinander.
„Bash
gcc -o main main.o util.o
„
Dieser Befehl nimmt „main.o“ und „util.o“ und fügt sie zu einer einzigen ausführbaren Datei namens main zusammen.
Führen Sie es aus mit:
„Bash
./main
„
Sie sehen eine Liste mit zehn Zufallszahlen, gefolgt von einem Bindestrich als Trennzeichen und der sortierten Liste.
Warum das wichtig ist
Sie fragen sich vielleicht: Warum sollten Sie sich mit diesem zusätzlichen Schritt die Mühe machen? Warum fügen Sie die Funktionen nicht einfach in „main.c“ ein?
Weil Bibliotheken skalieren. Wenn Ihre Projekte wachsen, stehen Ihnen Dutzende von Hilfsfunktionen zur Verfügung. Wenn Sie sie in separaten Dateien aufbewahren, können Sie sie in verschiedenen Projekten wiederverwenden



















