Wie kann ich C-Header-Dateien erstellen [closed]

Lesezeit: 3 Minuten

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.

  • 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

Benutzeravatar von Pablo Santa Cruz
Pablo Santa Cruz

  1. Öffnen Sie Ihren bevorzugten Texteditor
  2. Erstellen Sie eine neue Datei mit dem Namen “whatever.h”.
  3. 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 oncewas 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

Benutzeravatar von Bryan Ash
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.

1413410cookie-checkWie kann ich C-Header-Dateien erstellen [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy