Wo ist der Unterschied? malloc



  • Horst2 schrieb:

    Wenn ich mich nicht irre, ist ein Pointer immer 4 Byte groß.
    Ich schreibe immer

    pPointer = (pointertyp) malloc (Anzahl*sizof(Datentyp));
    

    Warum castest du??



  • Horst2 schrieb:

    Wenn ich mich nicht irre, ist ein Pointer immer 4 Byte groß.

    Du irrst.



  • Ohne mich jetzt allzuweit aus dem Fenster lehnen zu wollen würde ich behaupten, dass ein Pointer immer so groß ist wie die vom OS genutzte Größe des Adressregisters. Sprich: Bei DOS 16 Bit, bei den 32-Bit-Win- und Linux-Versionen 32 Bit und bei den 64-Bit-Versionen halt 64 Bit.



  • Shade Of Mine schrieb:

    Warum castest du??

    Weil malloc einen void Zeiger zurück liefert.

    void *malloc( size_t size );
    


  • Horst2 schrieb:

    Shade Of Mine schrieb:

    Warum castest du??

    Weil malloc einen void Zeiger zurück liefert.

    void *malloc( size_t size );
    

    Und?
    Warum castest du?

    Ein void Zeiger lässt sich ja bekanntlich in alle anderen Zeiger Typen implizit (also ohne cast) konvertieren...



  • Shade Of Mine schrieb:

    Horst2 schrieb:

    Shade Of Mine schrieb:

    Warum castest du??

    Weil malloc einen void Zeiger zurück liefert.

    void *malloc( size_t size );
    

    Und?
    Warum castest du?

    Ein void Zeiger lässt sich ja bekanntlich in alle anderen Zeiger Typen implizit (also ohne cast) konvertieren...

    Wennste nur klugscheißen kannst, hm?
    Es gibt nun mal Compiler, bei denen man casten muss!
    Blöder Klugscheisser...



  • tztztz schrieb:

    Es gibt nun mal Compiler, bei denen man casten muss!

    Jo, C++-Compiler. Guck mal wie das Forum heißt...



  • Bashar schrieb:

    tztztz schrieb:

    Es gibt nun mal Compiler, bei denen man casten muss!

    Jo, C++-Compiler. Guck mal wie das Forum heißt...

    Und? Schon mal drüber nachgedacht, dass es Leute gibt, die ANSI C mit einem C++ Compiler programmieren?



  • tztz schrieb:

    Und? Schon mal drüber nachgedacht, dass es Leute gibt, die ANSI C mit einem C++ Compiler programmieren?

    Warum sollte man soetwas machen? Abgesehen davon, dass es nicht geht - weil C++ nunmal C nicht zu 100% beinhaltet?



  • Shade Of Mine schrieb:

    tztz schrieb:

    Und? Schon mal drüber nachgedacht, dass es Leute gibt, die ANSI C mit einem C++ Compiler programmieren?

    Warum sollte man soetwas machen?

    Um die Vorteile der neuen IDEs nutzen zu können?

    Abgesehen davon, dass es nicht geht

    Ich mache es seit Monaten.

    - weil C++ nunmal C nicht zu 100% beinhaltet

    Bring doch mal bitte ein Beispiel, wo das beim programmieren wirklich ins Gewicht fallen würde.



  • tztz schrieb:

    Um die Vorteile der neuen IDEs nutzen zu können?

    Mhm, ich kenne keine reine C++ IDE - welche verwendest du?
    Mir fällt nämlich echt kein Compiler ein, der nur C++ kann...

    Ich mache es seit Monaten.

    *lol* Masochist.

    Du lebst also gerne mit längeren Compilezeiten und verwirrterem ASM Code für 0 Vorteile?

    - weil C++ nunmal C nicht zu 100% beinhaltet

    Bring doch mal bitte ein Beispiel, wo das beim programmieren wirklich ins Gewicht fallen würde.

    [/quote]
    Du kannst keine C99 Features verwenden
    Du musst also C89 verwenden, das führt zu folgenden Problemen:
    Du musst Prototypen anlegen - dh du kannst nicht jede C Bibliothek verwenden
    Du hast ein echtes const, welches sich anders als in C verhält, dito für static
    Du kannst C++ Funktionen verwenden die dann logischerweise mit einem C Compiler später nicht mehr funktionieren
    void foo() ist unterschiedlich
    enum ist unterschiedlich
    flexible array members gibt es in C++ nicht
    function name mangling
    unterschiede bei nested structs
    One Definition Rule

    mehr fällt mir gerade nicht ein

    aber das lustigste ist ja, dass du diese Probleme im tausch gegen längere Compilezeiten bekommst. auch ist der ASM code von C++ Compilern schwerer zu lesen 🙂

    du hast also keine Vorteile und viele Nachteile.



  • Deadlef schrieb:

    Ohne mich jetzt allzuweit aus dem Fenster lehnen zu wollen würde ich behaupten, dass ein Pointer immer so groß ist wie die vom OS genutzte Größe des Adressregisters. Sprich: Bei DOS 16 Bit, bei den 32-Bit-Win- und Linux-Versionen 32 Bit und bei den 64-Bit-Versionen halt 64 Bit.

    Korrekt. Vielleicht sollte man noch ergänzend sagen, dass sich dein OS auf das Zielsystem bezieht. Du kannst z. B. auch in einem 32Bit-System etwas für ein 16Bit-System compilieren; der Zeiger ist in diesem Fall dann 2 Byte (= 16Bit) groß.

    @Shade
    Und man kann sich das casten von void pointern sparen 😉



  • AJ schrieb:

    @Shade
    Und man kann sich das casten von void pointern sparen 😉

    Vielleicht könnte man hier jetzt noch der Vollständigkeit halber anmerken, dass C++-Compiler tatsächlich einen Fehler ausgeben, wenn man nicht explizit castet. Heisst also konkret: Wenn C programmiert wird die Datei auch tatsächlich .c benennen!



  • Und bei den Einstellungen auch den C-Compiler auswählen (wenn vorhanden und möglich)! 😉


Anmelden zum Antworten