Thou shall not cast malloc (Du sollst malloc nicht casten)



  • Elektronix schrieb:

    Dann ist das hier

    TactX schrieb:

    (*) Ein C++-Compiler ist kein Grund.

    falsch.

    Nein das heisst einfach "Thou shall use a C compiler."



  • Elektronix schrieb:

    Dann ist das hier

    TactX schrieb:

    (*) Ein C++-Compiler ist kein Grund.

    falsch.

    Nein. TactX wollte vermutlich darauf hinaus, dass ein C Programmierer mit der Erwartung/Befürchtung programmieren könnte, dass seine Quellcodes eines Tages von einem C++ Compiler werden würden. Dann denkt der sich: Oi oi oi, bau ich doch lieber gleich die Casts ein, denn der C++ Compiler haut sonst lauter Fehler raus.



  • Eher wollte ich darauf hinaus, dass viele Leute einen C++-Compiler für C verwenden, ohne zu wissen, dass das dann nicht C ist.



  • wenn man den c code dann in c++ verwenden muss, gibts ja auch ne nette loesung mit templates, die ging in etwa so:

    struct void_ptr {
      void* ptr;
      template<typename T>
      operator T*() {
        return (T*)ptr;
      }
    
      void_ptr(void* ptr)
      : ptr(ptr)
      {}
    };
    
    #define malloc old_malloc
    
    void_ptr malloc(size_t size) {
      return void_ptr(old_malloc(size));
    }
    

    da spart man sich dann den code durchzugehen...

    wobei man ja eigentlich auch in einem projekt teilweise den c compiler und teilweise den c++ compiler verwenden...



  • #define malloc old_malloc
    
    void_ptr malloc(size_t size) {
      return void_ptr(old_malloc(size));
    }
    

    Ich glaube, damit drehst du dich im Kreis (der Präprozessor nennt deine Funktion um in old_malloc - und die ruft sich anschließend selber wieder auf).

    Aber in C++ verwendet man ja auch new/delete für die Speicherverwaltung 😉



  • CStoll schrieb:

    Ich glaube, damit drehst du dich im Kreis (der Präprozessor nennt deine Funktion um in old_malloc - und die ruft sich anschließend selber wieder auf).

    Stimmt. Dann muss man eben

    void_ptr cpp_malloc(size_t size) {
      return void_ptr(malloc(size));
    }
    
    #define malloc cpp_malloc
    

    machen.

    Aber in C++ verwendet man ja auch new/delete für die Speicherverwaltung 😉

    ja ist klar. du hast 100.000 zeilen C code und tust da als erstes mal alle mallocs gegen new tauschen...



  • Aber nein. Nimm doch einfach Tools wie awk, sed und lass die für dich arbeiten. Außerdem laufen noch die ganzen Ausgaben der Tools am Bildschirm und du siehst super-beschäftigt aus 👍 😉



  • Shade Of Mine schrieb:

    Aber in C++ verwendet man ja auch new/delete für die Speicherverwaltung 😉

    ja ist klar. du hast 100.000 zeilen C code und tust da als erstes mal alle mallocs gegen new tauschen...

    Ganz bestimmt 😃 (oder noch besser - ich entscheide mich gleich, ob ich C oder C++ verwenden will und wähle mir meine Werkzeuge dazu passend aus, anstatt so etwas zusammenzuflicken.



  • CStoll schrieb:

    Ganz bestimmt 😃 (oder noch besser - ich entscheide mich gleich, ob ich C oder C++ verwenden will und wähle mir meine Werkzeuge dazu passend aus, anstatt so etwas zusammenzuflicken.

    wenn ich es vorher weiss ists ja kein thema - aber wenn du den code migrieren musst, dann sind das die kleinen tricks die dir erstmal ne woche arbeit sparen... 😉



  • Held der Nacht schrieb:

    Aber nein. Nimm doch einfach Tools wie awk, sed und lass die für dich arbeiten. Außerdem laufen noch die ganzen Ausgaben der Tools am Bildschirm und du siehst super-beschäftigt aus 👍 😉

    Watching shit scroll by for hours makes me a Linux expert overnight!

    *scnr* 🤡


Anmelden zum Antworten