Forum: Compiler & IDEs eigene Header files erstellen


von Gizmo (Gast)


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

von Karl H. (kbuchegg)


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.

von Gizmo (Gast)


Lesenswert?

Danke

werde das mal ausprobieren

von Gizmo (Gast)


Lesenswert?

Die .h Datei wird dann im Include verzeichnis des c Compilers
gespeichert, dass ist soweit klar.
Aber wo kommt den die .c Datei hin ?

von Karl H. (kbuchegg)


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"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.