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
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.
Die .h Datei wird dann im Include verzeichnis des c Compilers gespeichert, dass ist soweit klar. Aber wo kommt den die .c Datei hin ?
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.