So erstellen Sie wiederverwendbare C-Bibliotheken: Eine Schritt-für-Schritt-Anleitung

4

C ist eine minimalistische Sprache. Es vermittelt Ihnen die Grundlagen der Programmierung. Sie erhalten Variablen, Schleifen und Kontrollfluss. Das ist es. Wenn Sie von einer Tastatur lesen oder auf einem Bildschirm drucken möchten, sind diese Funktionen in C nicht integriert. Sie müssen sie schreiben oder eine Bibliothek verwenden.

Aus diesem Grund sind Bibliotheken in C so wichtig. Dabei handelt es sich um Codeblöcke, die Programmierer aus ihren Projekten extrahieren, um sie wiederverwendbar zu machen. Sie haben wahrscheinlich die Standard-I/O-Bibliothek oder stdio verwendet, ohne darüber nachzudenken. Aber darüber hinaus gibt es Bibliotheken für Mathematik, Strings und Zeit. Sie können Ihr eigenes bauen.

Die Aufteilung Ihres Codes in Module erleichtert das Testen, Debuggen und Verstehen. Außerdem können Sie die Logik in verschiedenen Programmen wiederverwenden. Schauen wir uns an, wie man aus einem monolithischen Skript einen Teil davon in eine portable Funktion umwandelt.

Logik aus einem Monolithen extrahieren

Betrachten Sie dieses C-Programm. Es füllt ein Array mit Zufallszahlen, sortiert sie mithilfe eines Blasensortierungsalgorithmus und gibt die Ergebnisse aus.

„c

int a[MAX];
int rand_seed=10;
int rand() / von K&R – erzeugt eine Zufallszahl zwischen 0 und 32767. /
{
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}
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]); } / Blase sortiert das Array /
für (x=0; x < MAX-1; x++) für (y=0; y < MAX-x-1; y++) if (a[y] > a[y+1])
{
t=a[y];
a[y]=a[y+1];
a[y+1]=t;
}
/ sortiertes Array drucken /
printf(“——————–\n”);
für (i=0; i < MAX; i++) printf("%d\n",a[i]); } „

Die Sortierlogik ist hier in „main“ vergraben. Um dies wiederverwendbar zu machen, müssen wir die Blasensortierung extrahieren.

Erstellen einer Grundfunktion

Das Array „a“ und die Konstante „MAX“ sind in diesem Beispiel global. Das bedeutet, dass die Sortierfunktion nicht unbedingt Parameter benötigt, um darauf zuzugreifen. Es empfiehlt sich jedoch, lokale Variablen für die Schleifenzähler („x“, „y“, „t“) zu verwenden, um die Funktion in sich geschlossen zu halten.

Hier ist der überarbeitete Code. Wir haben die Sortierlogik in „bubble_sort“ isoliert.

„c

int a[MAX];
int rand_seed=10;
/ von K&R – gibt eine Zufallszahl zwischen 0 und 32767 zurück. /
int rand()
{
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}

void bubble_sort(int m)
{
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;
}
}

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); / sortiertes Array drucken /
printf(“——————–\n”);
für (i=0; i < MAX; i++) printf("%d\n",a[i]); } „

Sie übergeben die Anzahl der Elemente an „bubble_sort“, anstatt „MAX“ fest zu codieren. Es funktioniert. Aber es ist immer noch an das globale Array „a“ ​​gebunden.

Verallgemeinerung für echte Wiederverwendbarkeit

Eine Funktion ist nur dann wirklich wiederverwendbar, wenn sie nicht vom globalen Zustand abhängt. Wir können „bubble_sort“ weiter verallgemeinern, indem wir das Array selbst als Parameter übergeben.

Ändern Sie die Funktionssignatur in:

„c
bubble_sort(int m, int a[])

Dies weist den Compiler an, ein ganzzahliges Array beliebiger Größe zu akzeptieren. Der Hauptteil von „bubble_sort“ ändert sich nicht. Sie aktualisieren einfach den Aufruf in „main“:

„c
bubble_sort(MAX, a);

Beachten Sie, dass wir im Funktionsaufruf nicht „&a“ verwenden. Möglicherweise erwarten Sie die Übergabe der Adresse, da die Sortierung das Array ändert, aber in C zerfallen Arrays in Zeiger, wenn

Попередня статтяRoku Streaming Stick: MHL vs. HDMI-Versionen erklärt
Наступна статтяWie sich das Fernsehen von Kathodenstrahlen zu hochauflösenden digitalen Bildschirmen entwickelte