typedef - malloc: Besser, schlechter oder wumpe ?



  • Haach Mist, sorry...das zweite sollte heissen:

    MyStruct *p = ( _MyStruct* ) malloc( sizeof( _MyStruct ) );
    

    weil nämlich

    printf( "%i %i ", sizeof(_MyStruct), sizeof(MyStruct) );
    

    liefert mir den gleichen Wert.
    Von daher tippe ich auf wumpe ?

    Wenn ich nicht caste, mecker der Compiler.



  • proggingmania schrieb:

    Wenn ich nicht caste, mecker der Compiler.

    Dann ist er kaputt.



  • Wenn der Compiler c++ - Syntax anwendet (*.cpp) oder ein cpp-Schalter, dann meckert er.



  • Ja, stimmt, hatte ausversehen eine *.cpp Datei kompiliert. Hätt ich mal so gelassen, wo vorhin 1 Fehler war, sind jetzt 45 😃



  • Z.B. hat der vorher das hier

    int const maxlen = 100;
    MyStruct myStruct[maxlen];
    

    ohne meckern geschluckt aber jetzt kommt:
    error C2057: expected constant expression

    Falls gerade jemand Langeweile hat...lol.. naja muss ich wohl

    MyStruct myStruct[100];
    

    schreiben, nehm ich mal an.



  • Jetzt ist aber das malloc Problem wenigstens weg, kein Meckern mehr bei:

    p = malloc( sizeof( MyStruct ) );
    

    Dafür
    error C2065: '_MyStruct' : undeclared identifier bei

    p = malloc( sizeof( _MyStruct ) );
    

    So langsam komm ich dahinter...johoooooo 🕶 🙂



  • SG1 schrieb:

    * _Grossbuchstabe verwendet man nicht.

    Was verwendet man dann und warum ? 😕



  • proggingmania schrieb:

    SG1 schrieb:

    * _Grossbuchstabe verwendet man nicht.

    Was verwendet man dann

    Irgendwas anderes.

    und warum ? 😕

    Weil alle Bezeichner, die mit _Grossbuchstabe anfangen, reserviert sind.



  • [quote="proggingmania"]

    Dafür
    error C2065: '_MyStruct' : undeclared identifier bei

    p = malloc( sizeof( _MyStruct ) );
    

    Der Identifier heißt ja auch struct _MyStruct

    proggingmania schrieb:

    Z.B. hat der vorher das hier

    int const maxlen = 100;
    MyStruct myStruct[maxlen];
    
    size_t const maxlen = 100;
    

    aber wenn dein Compiler das nicht kann, dann nimm

    enum { maxlen = 100 };
    


  • SG1 schrieb:

    Weil alle Bezeichner, die mit _Grossbuchstabe anfangen, reserviert sind.

    Komisch das der dann nicht meckert, der guteste 🙄 .



  • rüdiger schrieb:

    aber wenn dein Compiler das nicht kann, dann nimm

    enum { maxlen = 100 };
    

    Supie das klappt, gefällt mir auch gleich viel besser, als so ne 'festgebrannte' 100.



  • progginmania schrieb:

    SG1 schrieb:

    Weil alle Bezeichner, die mit _Grossbuchstabe anfangen, reserviert sind.

    Komisch das der dann nicht meckert, der guteste 🙄 .

    Nimmt dein Compiler vielleicht zufällig hin. Aber es ist nach meiner Meinung absolut keine gute Idee, sich an Fehler zu gewöhnen, nur weil zufällig die Version des von dir verwendeten Compilers auf dem Betriebssytem mit deiner Hardware zu einer bestimmten Uhrzeit den Fehler akzeptiert...

    YMMV

    (Wenn du nicht glaubst, das es ein Fehler ist, schau im ISO C-Standard Abschnitt 7.1 (hatten gerade erste einen Thread drüber))



  • progginmania schrieb:

    SG1 schrieb:

    Weil alle Bezeichner, die mit _Grossbuchstabe anfangen, reserviert sind.

    Komisch das der dann nicht meckert, der guteste 🙄 .

    Gerechnet auf alles, was man falsch machen kann, meckert er sowieso fast nie.



  • proggingmania schrieb:

    printf( "%i %i ", sizeof(_MyStruct), sizeof(MyStruct) );
    

    Das hier geht im übrigen auch nur mit einem C++-Compiler.



  • rüdiger schrieb:

    (Wenn du nicht glaubst, das es ein Fehler ist, schau im ISO C-Standard Abschnitt 7.1 (hatten gerade erste einen Thread drüber))

    Neee, nicht weil ich es nicht glaube, sondern weil ich es so in relativ großen Projekten gesehen hab.

    Naja, ist ok, ich danke euch allen.

    Gruß,
    p.



  • Du musst entweder

    MyStruct *p = malloc(sizeof(MyStruct));
    

    oder

    MyStruct *p = malloc(sizeof(struct _MyStruct));
    

    schreiben

    edit:

    Mist, hab nicht gesehen, dass es eine 2. Seite gibt 😉 die Lösung war ja schon oben.



  • proggingmania schrieb:

    rüdiger schrieb:

    (Wenn du nicht glaubst, das es ein Fehler ist, schau im ISO C-Standard Abschnitt 7.1 (hatten gerade erste einen Thread drüber))

    Neee, nicht weil ich es nicht glaube, sondern weil ich es so in relativ großen Projekten gesehen hab.

    Da siehst du: Auch Profis machen Fehler...



  • rüdiger schrieb:

    Da siehst du: Auch Profis machen Fehler...

    Könnt mir vorstellen, das die das wissen und entweder drauf pfeifen, oder ihre eigenen Standards machen.



  • proggingmania schrieb:

    rüdiger schrieb:

    (Wenn du nicht glaubst, das es ein Fehler ist, schau im ISO C-Standard Abschnitt 7.1 (hatten gerade erste einen Thread drüber))

    Neee, nicht weil ich es nicht glaube, sondern weil ich es so in relativ großen Projekten gesehen hab.

    Könnte mit ein Grund sein, warum relativ große Projekte manchmal scheitern...


Anmelden zum Antworten