mikrocontroller.net

Forum: Compiler & IDEs eigene Header files erstellen


Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

werde das mal ausprobieren

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.