Wie kann man eine Header-Datei für eine Funktion und die Implementierung dieser Funktion in verschiedenen Dateien haben? Und wie kann man main in einer anderen Datei haben und diese Funktion aufrufen? Der Vorteil ist, dass diese Funktion dann eine unabhängige Komponente ist, die wiederverwendet werden kann, oder?
Antworten
Zu viele Anzeigen?Dies lässt sich am besten anhand eines Beispiels veranschaulichen.
Angenommen, wir wollen eine Funktion, die den Kubus einer ganzen Zahl findet.
Sie hätten die Definition (Umsetzung) in, sagen wir, cube.c
int cube( int x ) {
return x * x * x;
}
Dann fügen wir die Funktion Erklärung in einer anderen Datei. Gemäß der Konvention wird dies in einer Header-Datei , cube.h
in diesem Fall.
int cube( int x );
Wir können die Funktion nun von einem anderen Ort aus aufrufen, driver.c
zum Beispiel durch die Verwendung der #include
Richtlinie (die Teil des C-Präprozessors ist) .
#include "cube.h"
int main() {
int c = cube( 10 );
...
}
Schließlich müssen Sie jede Ihrer Quelldateien in eine Objektdatei kompilieren und diese dann verknüpfen, um eine ausführbare Datei zu erhalten.
Verwendung von gcc zum Beispiel
$ gcc -c cube.c #this produces a file named 'cube.o'
$ gcc -c driver.c #idem for 'driver.o'
$ gcc -o driver driver.c cube.c #produces your executable, 'driver'
Eigentlich können Sie jede Funktion in Header-Dateien für eine bessere Leistung (bei der Implementierung von Bibliotheken zum Beispiel) implementieren, solange nicht auf ein bestimmtes Objekt verwiesen wird (tatsächlich wird es nicht kompiliert). Übrigens, auch auf diese Weise haben Sie eine separate Schnittstelle und Implementierung ;) Natürlich müssen Sie Gurads in Ihre Header-Dateien einbinden, um "multiple definition" Fehler zu vermeiden.