Ich möchte in der Lage sein, eine Sammlung von Funktionen in einer Header-Datei zu erstellen, die ich in eines meiner C-Programme #einschließen könnte.
Wie kann ich C-Header-Dateien erstellen [closed]
Pablo Santa Cruz
- Öffnen Sie Ihren bevorzugten Texteditor
- Erstellen Sie eine neue Datei mit dem Namen “whatever.h”.
- Setzen Sie Ihre Funktionsprototypen darin ein
ERLEDIGT.
Beispiel what.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
Hinweis: Include Guards (Präprozessorbefehle) dank Luke hinzugefügt. Sie vermeiden es, dieselbe Header-Datei zweimal in dieselbe Kompilierung aufzunehmen. Eine andere Möglichkeit (auch in den Kommentaren erwähnt) ist das Hinzufügen #pragma once
Es ist jedoch nicht garantiert, dass es von jedem Compiler unterstützt wird.
Beispiel what.c
#include "whatever.h"
int f(int a) { return a + 1; }
Und dann können Sie “whatever.h” in jede andere .c-Datei einfügen und sie mit der Objektdatei von “whatever.c” verknüpfen.
So was:
Beispiel.c
#include "whatever.h"
int main(int argc, char **argv)
{
printf("%d\n", f(2)); /* prints 3 */
return 0;
}
So kompilieren Sie es (wenn Sie GCC verwenden):
$ gcc -c whatever.c -o whatever.o
$ gcc -c sample.c -o sample.o
So verknüpfen Sie die Dateien, um eine ausführbare Datei zu erstellen:
$ gcc sample.o whatever.o -o sample
Sie können Probe testen:
$ ./sample
3
$
-
Vielleicht möchten Sie Header Guards erwähnen
– Lukas
14. Mai 2010 um 1:48 Uhr
-
@luke: vielen Dank. Keine Ahnung, was Header Guards sind. Werde jetzt mal googlen. Danke noch einmal.
– Pablo Santa Cruz
14. Mai 2010 um 1:50 Uhr
-
@luke Sie heißen offiziell Include Guards, aber dein Begriff ist ziemlich gebräuchlich. Es gibt auch
#pragma once
was kein Standard ist, aber weithin unterstützt wird und (meiner Meinung nach) viel einfacher ist– Michael Mrozek
14. Mai 2010 um 1:57 Uhr
-
Das ist nett, aber kann ich nicht sagen, was eine Funktion in der Header-Datei bewirkt? Gibt es eine andere Form der modularen Programmierung?
– Benutzer340838
14. Mai 2010 um 2:03 Uhr
-
@PabloSantaCruz wo würde der Compiler dann nach der Funktionsdefinition für die in deklarierten Prototypen suchen
.h
Datei? weil wir keinen Hinweis darauf geben, wo die Funktionen definiert sind.– noufal
11. Oktober 2013 um 4:04 Uhr
Bryan Ash
Header-Dateien können jeden gültigen C-Code enthalten, da sie vor der Kompilierung vom Präprozessor in die Kompilierungseinheit eingeschleust werden.
Wenn eine Header-Datei eine Funktion enthält und von mehreren eingebunden wird .c
Dateien, jeweils .c
file erhält eine Kopie dieser Funktion und erstellt ein Symbol dafür. Der Linker wird sich über die doppelten Symbole beschweren.
Die Erstellung ist technisch möglich static
Funktionen in einer Header-Datei zur Aufnahme in mehrere .c
Dateien. Dies wird jedoch im Allgemeinen nicht getan, da es gegen die Konvention verstößt, in der sich Code befindet .c
Dateien und Deklarationen befinden sich in .h
Dateien.
Siehe die Diskussionen in C/C++: Statische Funktion in Header-Datei, was bedeutet das? für mehr Erklärung.
mit einem Texteditor?
– stefanB
14. Mai 2010 um 1:45 Uhr
Wenn ich richtig folge, möchten Sie eine Bibliothek erstellen, ähnlich den Standard-C-Bibliotheken, also fügen Sie eine Header-Datei mit Funktionsdefinitionen ein und verknüpfen dann mit dieser Bibliothek, wenn Sie Ihre endgültige ausführbare Datei erstellen. Ist das richtig?
– Auffälliger Compiler
14. Mai 2010 um 2:06 Uhr