struct und header



  • key.h:

    #define SAFE_DELETE(p)          {if(p) {free (p); (p) = NULL;}}
    #define SAFE_DELETE_ARRAY(p)    {if(p) {free (p); (p) = NULL;}}
    #define INIT_KEY(p)             {if(p) {p->pKey = NULL; p->changed = FALSE;}}
    #define FREE_KEY(p)             {if(p) {SAFE_DELETE_ARRAY(p->pKey); p->changed = TRUE;}}
    
    typedef struct CRYPTKEY
    {
        BYTE * pKey; 
        long length;
        BOOL changed;
    } CRYPTKEY;
    

    rc4.h:

    typedef struct RC4BOXES
    {
        BYTE SBox[SBOX_LENGTH];
    	BYTE K[SBOX_LENGTH];
    } RC4BOXES;
    

    main.c:

    #define STRICT
    
    #include <stdio.h>
    #include <stdlib.h>
    #include "key.h"
    #include "rc4.h"
    
    int main(int argc, char *argv[])
    {
        CRYPTKEY key;
        RC4BOXES box;
    
        INIT_KEY(&key);    
        FREE_KEY(&key);
        system("PAUSE");	
        return 0;
    }
    

    Es gibt mehrere Fehler, was die Verwendung des '->' in den Makros betrifft,
    und das struct RC4BOXES wird erst gar nicht als Typ oder struct erkannt.
    Was mache ich falsch?



  • struct BLA {
    ....
    }bla;
    

    BLA ist ein typ
    bla eine variable
    und in c darf nichts den gleichen namen haben.

    mfg



  • Nein, das ist es nicht. Zudem ist das keine Mehrfachdeklaration sondern ein Typedef, der erlaubt ist. (Oder zumindest nicht stört)
    Aber wie gesagt, auch ein ändern der Namen bringt keinen Fortschritt.



  • BLA ist ein typ
    bla eine variable
    und in c darf nichts den gleichen namen haben.

    soweit ich letztens gelesen habe kann ein struct den gleichen namen habe wie eine variable.
    oder irre ich mich da? 😕
    ausserdem ist das eine klein und das andere grossgeschrieben
    ich hab mir mal dein code kopiert und versucht zu compilieren, ich dachte gibts nur paar fehler, aber da hast richtig was zu tun.
    Gings net komplizierter? 😃
    ich hab versucht die fehler zu beseitigen, aber wie ich sehe ist fast in "jeder" zeile ein fehler, willst du es nicht versuchen das programm neuzuschreiben?
    sorry



  • Nagut, das liegt vielleicht daran, dass das oben nur die relevanten ausschnitte sind, komplett ohne header usw. Bind mal jeweils die windows.h ein, dann sind schon einige Fehler weniger drin 😃
    Was ich grad noch gemerkt hab:

    INIT_KEY((&key));
    FREE_KEY((&key));
    

    und schon sind keine Fehler mehr in den Makros 🙄
    Aber das Grundproblem mit den structs bleibt.



  • Nachtrag:
    Das Problem ist gelöst, wenn man die Definition

    typedef struct RC4BOXES
    {
        BYTE SBox[SBOX_LENGTH];
    	BYTE K[SBOX_LENGTH];
    } RC4BOXES;
    

    nochmal in die main.c einbindet. Aber das is dünnsch, ganz und gar gegen den Sinn und Zweck eines Headers. Bibts dazu ne Lösung?



  • naja, ich krieg immer noch viele fehlermeldungen 😡



  • N00Bie schrieb:

    Nagut, das liegt vielleicht daran, dass das oben nur die relevanten ausschnitte sind, komplett ohne header usw. Bind mal jeweils die windows.h ein, dann sind schon einige Fehler weniger drin 😃
    Was ich grad noch gemerkt hab:

    INIT_KEY((&key));
    FREE_KEY((&key));
    

    und schon sind keine Fehler mehr in den Makros 🙄
    Aber das Grundproblem mit den structs bleibt.

    Du könntest natürlich auch die Makros entsprechend ändern, indem du bei jedem Verwenden deines Parameters p Klammern drumherum machst (wie man es generell machen sollte ;)).

    Zu deinem Problem mit der Deklaration deiner Struktur:
    Ist das alles was du in deinen Headerdateien stehen hast? Wo in deinem Verzeichnisbaum liegt rc4.h? Im Includeverzeichnis deines Compilers oder im gleichen Verzeichnis wie main.c?

    Man könnte übrigens auch mehr über den Fehler sagen, wenn man die Fehlermeldung(en) wüsste ;).



  • liegt im selben verzeichniss wie der rest der dateien

    17 F:\C++ Source\Verschlüsselung\c-header\main.c `RC4BOXES' undeclared (first use in this function)
    


  • Was steht alles in deiner Includedatei rc4.h?



  • problem gelöst, schreibfehler im Mehrfachdeklarationsschutz. 🤡
    Danke für die Hilfe

    🙂


Anmelden zum Antworten