Probleme mit neu definerten CALLOC



  • Habe diese Zeile in einem Programm stehen und verstehen sie leider gar nicht.

    #define CALLOC(ptr, nr, type) if(!(ptr = (type *) calloc((size_t)(nr), sizeof(type)))) {fprintf(stderr, "calloc failed on line %d of file %s\n", __LINE__, __FILE__); exit(FAIL); }
    

    Ich verstehe: Ich definiere mir eine neue function CALLOC()mit drei argumenten ptr,nr und type. danach müsste eigentlich die anweisung kommen, was diese funktion genau machen soll.
    Mein Gedanke ist, dass wenn ptr nicht (type 😉 ist, dann soll calloc() mit (size_t)(nr) bobjekten und diese objekte haben sizeof(type) bytes?
    der fehlerprint danach ist erstmal nicht so wichtig.



  • TolpanB schrieb:

    Ich verstehe: Ich definiere mir eine neue function CALLOC()...

    Schon falsch. das ist keine Funktion, sondern ein Makro.
    Makros sind keine Funktionsaufrufe, sondern werden in den Sourcecode vor dem Compilieren durch den Präprozessor eingefügt.

    TolpanB schrieb:

    Mein Gedanke ist, dass wenn ptr nicht (type 😉 ist,

    Auch falsch. Mit (type*) wird das Ergebnis von calloc nur auf diesen Type gecasted. Danach wird geprüft ob das Ergebnis ungleich null ist ( if( ! (....) ) ).

    Vielleicht mal ein Grundlagenbuch für C lesen? Ein altes Sprichwort sagt: Lesen bildet.



  • ...statt size_t sollte glaube ich ein definierter Rückgabetyp oder ein vorgegebener Wert stehen(.?!;) Ist dieser Code echt in einem Programm? oder aus einem Lehrbuch abgeschrieben? Entschuldigung im vorhinein falls ich falsch liege aber ich konnte es mir nicht verkneifen hierauf diese Frage zu stellen...


Anmelden zum Antworten