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*