Eine *.c Datei in 1 x *.h und 2 x *.c splitten ?



  • Wie stell ich das an? muss ich auf irgendetwas (besonders) achten?

    Die eine *.c Datei muss die header "includen"

    aber hab beim besten willen keine ahnung wie ich das anstelle

    habe da was von makefiles gelesen aber ich denke, dass es in meinem fall

    viel einfacher geht.

    Um etwas genauer zu werden geht es um doppelt verkettete listen...

    habe jetz meine funktionen, die bildung der liste(n) und die ausgabe (bzw den

    test ob alles gut gelaufen ist) in einer datei...

    nun soll die DEFINITION der funktionen ( move_elem_head , add_elem_tail etc.. )

    in der header datei liegen, die bildung der listen und die IMPLEMENTATION soll

    in einer eigenen *.c datei liegen und die AUSGABE soll in einer weiteren *.c

    datei sein...

    diese sollen dann miteinander funktionieren....

    aber kp wie und was 😕

    hoffe ihr habt verstanden was ich meine und könnt mir helfen

    Danke 🙂



  • a) du legst eine Headerdatei a.h an.
    b) du legst eine c-Datei b.c an.
    c) du legst eine c-Datei c.c an.
    d) in den c-Dateien stehen die Implementierungen der Funktionen
    e) in die h-Datei kopierst du den Funktionskopf hinein (Prototyp/Deklaration)
    f) du legst eine d.c Datei an
    g) in dieser machst du eine #include -Anweisung
    #include "a.h"
    f) jetzt kannst du in der d-Datei die Funktionen z.B. in main aufrufen
    g) Übersetzen z.B. mit gcc
    gcc b.c c.c d.c

    Zeh Mau



  • am anfang der header datei steht

    #ifndef DLLHEADER_H ( der name der datei soll dllheader.h werden)
    #define DLLHEADER_H

    und am ende steht

    #endif

    richtig?

    dazwischen dann den funktionskopf?



  • Genau!

    #ifndef DLLHEADER_H
    #define DLLHEADER_H  
    
    void funcBeispiel(void);
    
    #endif
    


  • in b.c

    habe ich dann also einfach nur mehrere implementierungen aufgereiht wie

    extern int
    list_empty(struct list_head *head)
    {
      if (head->next == head && head->prev == head)
        {printf("Die Liste ist leer.");
          return 1;  //falls beide verweise auf head selbst zeigen dann leer
        }
      else {
       printf("Die Liste ist nicht leer.");
        return -1;
      }
    }
    

    ohne main oder so?



  • Genau!

    Es fehlt aber
    #include <sdtio.h> für printf().

    list_empty ist ein typedef, oder?

    Deine Struktur list_head muss auch noch deklariert werden.

    Bestenfalls alle Deklarationen in die Header-Datei und überall inkludieren.

    Besten Dank!



  • ahaaa 😃 habs jetz hinbekommen 😃 danke dir vielmals 😃



  • Gerne 😃


Anmelden zum Antworten