eigene Header files erstellen

Gast #367105
Lesenswert?
• ▲
▼
Hallo Leute

Ich möchte ein paar selbst geschriebene Funktionen in ein Header file
auslagern, zwecks Wiederverwendbarkeit.
Meine Frage ist nun was ist zu beachten wenn man eigene Headerfiles
erstellen möchte ?
Hat vielleicht jemand von euch nen Link wo das alles gut erklärt ist ?

Danke für eure Hilfe

Gruß Gizmo
#367106
Lesenswert?
• ▲
▼
Zunächst mal packst du im Normalfall die Funktionen
nicht in das Headerfile.
Ins Headerfile kommen die Funktionsdeklerationen und
ev. noch notwendige #define bzw. notwendige Datenstrukturen,
eben alles was ein Aufrufer braucht um deine Funktionen
einsetzen zu können.


Die Implementierungen der Funktionen kommen in eigene *.c
Files.

zb. Du hast Funktionen die sich mit linearen Listen
beschäftigen: list_init, list_add, list_remove

dann schreibst du eine

list.h
******

#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED

/* der Knoten einer Liste
 * in data werden die eigentlichen Daten abgelegt
 */
struct list_node
{
  int data;
  struct list_node* next;
};

/*
 * die Liste selbst
 */
struct list
{
  struct list_node* head;
  struct list_node* tail;
}

/*
 * Die Funktionen auf einer Liste
 */

void list_init( struct list* the_list );
void list_add( struct list* the_list, struct list_node* new_node );
void list_remove( struct list* the_list, struct list_node* node );

#endif

In diesem Header file ist alles beisammen, was ein Aufrufer
braucht: Da gibt es die Funktionsdeklerationen für die Funktionen
und auch die Strukturdefinitionen, damit der Compiler weiss
wass denn ein struct list eigentlich ist, dass da in jedem
Funktionsaufruf vorkommt.

Die eigentliche Implementierung ist aber in einer eigenen
Datei:

list.c
******

#include "list.h"

void list_init( struct list* the_list)
{
  the_list->head = NULL;
  the_list->tail = NULL;
}

void list_add( struct list* the_list, struct list_node* new_node )
{
  if( the_list->tail == NULL )
    the_list->head = the_list->tail = new_node;

  else
    the_list->tail->next = new_node;

  new_node->next = NULL;
}

void list_remove( struct list* the_list, struct list_node* node )
{
  if( the_list->head == node ) {
    the_list->head = the_list->head->next;
  }

  else {
    ...

}

Will jetzt jemand diese Liste verwenden, dann includiert
er list.h und fügt list.c zum Projekt hinzu, sodass es mitcompiliert
und gelinkt wird.
#367109
Lesenswert?
• ▲
▼
> Die .h Datei wird dann im Include verzeichnis des c Compilers
> gespeichert

Nein. Die kommt nicht dorthin.

Leg dir für dich selbst ein Verzeichnis an, wo du deine
Dinge sammelst. Dort sind dann sowohl Header als auch
C-Dateien.
Entweder du gibst dann deinem Compiler dieses Verzeichnis
als zusätzliches Verzeichnis für Include Dateien an, oder
du gibst den kompletten Pfad im include an.

#include "C:\MeineFiles\list.h"

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.