NULL or 0



  • netrobot schrieb:

    dann ist es nicht mehr eine Geschmacksache, sondern handelt es sich um Portabilität.

    Die Begründung ist aber falsch oder absichtlich irreführend. NULL ist Teil des C++-Standards, definiert in <cstdlib>. Siehe 18.1

    ajax: Und wie weist du einem Pointer 0 zu?



  • NULL ist ISO Standard? Hab gedacht der Compiler arbeitet mit 0, NULL ist doch nur ein Makro?

    Soweit ich weiß, wird im ISO-Kommitte deshalb über ein Schlüsselwort diskutiert, heiße Kandidaten sind z.B. null_ptr.



  • Das wäre ja traumhaft 🙂



  • Na dann schlage ich doch gleich eine one_ptr und two_ptr vor. Oder sollte es dann doch Konstanten für ONE und TWO geben? 😃



  • netrobot schrieb:

    Do not use the NULL macro.
    (QACPP 5128)
    Justification The NULL macro is not defined by the C++ standard and so its usage is not portable.

    Dagegen spricht aber das hier:

    ISO 14882-1998 schrieb:

    C.2.2.3 Macro NULL

    The macro NULL, defined in any of <clocale>, <cstddef>, <cstdio>, <cstdlib>, <cstring>,
    <ctime>, or <cwchar>, is an implementationdefined C++ null pointer constant in this International
    Standard (18.1).

    Edit: Guten Morgen 😮 Bin noch mit Morgenblindheit beschlagen, sorry Bashar

    Edit2: Damit mein Post nicht völlig überflüssig ist 🙂 noch folgende Info aus dem Standard hinsichtlich des NULL-Makros:
    Possible definitions include 0 and 0L, but not (void*)0.



  • ist <cstring> nicht plattform abhängig?



  • netrobot schrieb:

    ist <cstring> nicht plattform abhängig?

    Nein. Das ist der Standard C++ Header für den C-Header string.h.



  • Artchi schrieb:

    NULL ist ISO Standard? Hab gedacht der Compiler arbeitet mit 0, NULL ist doch nur ein Makro?

    ???

    Der Standard fordert, dass NULL ein Makro ist, was so und so definiert ist, wo ist das Problem?



  • uns wo ist jetzt das problem bei 0 oder meinetwegen auch NULL, da braucht
    man doch kein keyword für 😕



  • icepacker schrieb:

    uns wo ist jetzt das problem bei 0 oder meinetwegen auch NULL, da braucht
    man doch kein keyword für 😕

    void func(char*);
    void func(long);
    
    int main() {
        func(0); // Mehrdeutig!
        func(NULL); // Was wird aufgerufen? Könnte mehrdeutig sein oder func(long) aufrufen
    }
    


  • Bashar schrieb:

    ajax: Und wie weist du einem Pointer 0 zu?

    stimmt deswegen benutze ich wo es nur geht referenzen 😉

    wenn ich zuweisen muss, dann mit " = 0 "

    kommt aber sehr selten vor.


Anmelden zum Antworten