Headerdateien



  • Hallo Leute!

    Ich hab mir jetzt meine eigene header datei geschrieben.
    Die Funktion die ich darin deklariert habe, habe ich in der gleichnamigen C-Datei implementiert.

    Jetzt habe ich folgendes Problem: WOHIN mit dieser C Datei?
    denn wenn ich auf diese Funktion zurückgreifen will spinnt der Compiler.

    #ifndef TEST_H
    #define TEST_H
    
    FILE *file;
    int a;
    int b;
    int check (void);
    
    #endif
    
    #include<test.h>
    
    int check (void)
    
    {
    
    file=fopen("check.txt","r+");
    
    if (file==NULL)
    {
    file=fopen("check.txt","w+");
    fprintf (file,"%i",a);
    fclose(file);
    }
    
    else
    {
    fscanf(file,"%i", &b);
    b=b+1;
    fclose(file);
    
    file=fopen("check.txt","w+");
    fprintf(file,"%i",b);
    fclose(file);
    }
    
    return b;
    }
    

    Könnt ihr mir da weiterhelfen?

    MFG



  • schreib statt

    #include <test.h>
    

    einfach

    #include "test.h"
    

    dann sollte es funktionieren



  • ja genau

    denn: mit < > sucht der compiler im includeverzeichniss nach der datei
    mit " " sucht der compiler im aktuellen verzeichniss und/also in dem, wo
    dein programm/datei sitzt

    ps: der compiler spinnt nur in den wenigsten fällen 😉



  • Kazaa schrieb:

    #ifndef TEST_H
    #define TEST_H
    
    FILE *file;
    int a;
    int b;
    int check (void);
    
    #endif
    

    hi,
    die variablen würde ich aus der .h-datei rausnehmen. spätestens wenn die .h von einem zweiten .c file includiert wird, gibts problems wegen mehrfachen definitionen. tu' die variablen besser in ein .c-file und mach' die .h so:

    #ifndef TEST_H
    #define TEST_H
    
    extern FILE *file;
    extern int a;
    extern int b;
    
    int check (void);
    
    #endif
    

    das 'extern' sorgt dafür, dass der compiler weiss, dass die veriablen in irgendeinem .c-file des projekts vorhanden sind und dann hat er nix zu meckern.
    :xmas2:



  • Danke für eure Hilfe!

    Nur noch eine Frage:

    In dem "Tut" steht auch, dass man die c dateien zuerst kompilieren muss und nur die obj.dateien einbinden kann?

    Ist das zwingend notwendig?

    Mfg



  • Kazaa schrieb:

    In dem "Tut" steht auch, dass man die c dateien zuerst kompilieren muss und nur die obj.dateien einbinden kann?

    jo, der c-compiler erzeugt die .obj-dateien und die werden dann vom linker zu einem lauffähigen programm verknüpft.
    :xmas2:



  • Hi,

    aba das heisst nicht, dass ich die c datein ZUERST kompilieren muss bevor ich sie einbinde (per h.datei) oder?

    Lg



  • doch, die .c dateien müssen zuerst compiliert werden, weil sonst keine, bzw. veraltete obj-dateien da sind. hast du einmal obj-dateien erzeugt, dann müssen nur noch die .c-files compiliert werden, die verändert wurden. .h-dateien werden nicht einzeln kompiliert, die werden vom preprozessor oder compiler beim compilieren an die stellen eingefügt, an denen das #include erscheint.
    :xmas2:



  • ah k,thx, letzte Frage:

    was ist wenn ich in der .h Datei nur Funktionen deklarieren will?
    Wieso kann ich die Variablen die zur Ausführung der externen Funktionen nötig sind innnerhalb der betreffenden Funktionen deklarieren?
    In main () brauch ich sie ja nicht.

    Kompilieren lässt sichs aufjedenfall ohne Fehlermeldungen und Warnungen

    Mfg


Anmelden zum Antworten