NULL Makro (__cplusplus



  • /* Define NULL pointer value */
    #ifndef NULL
    #ifdef __cplusplus
    #define NULL    0
    #else
    #define NULL    ((void *)0)
    #endif
    #endif
    

    Wann ist __cplusplus denn eigentlich definiert?
    Also wann genau wird NULL durch ((void *)0) ersetzt?
    Bei mir wird es momentan nämlich einfach nur mit 0 ersetzt.



  • null0 schrieb:

    Wann ist __cplusplus denn eigentlich definiert?

    ISO/IEC 14882:2003 (E) schrieb:

    16.8 Predefined macro names [cpp.predefined]
    1 The following macro names shall be defined by the implementation:

    [...]

    __cplusplus The name __cplusplus is defined to the value 199711L when compiling a C++ translation unit.

    null0 schrieb:

    Also wann genau wird NULL durch ((void *)0) ersetzt?

    Ne, umgedreht: Wann genau wird NULL durch 0 ersetzt?

    null0 schrieb:

    Bei mir wird es momentan nämlich einfach nur mit 0 ersetzt.

    ISO/IEC 14882:2003 (E) schrieb:

    4.10 Pointer conversions [conv.ptr]
    1 A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to
    zero. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that
    type and is distinguishable from every other value of pointer to object or pointer to function type.[...]

    Gratuliere, du Kompilierst C++ Code mit einem C++ Compiler.

    BTW: In reinem C++ Code ist die Verwendung von 0 statt NULL in Mode.

    greetz, Swordfish


  • Mod

    BTW: In reinem C++ Code ist die Verwendung von 0 statt NULL in Mode.

    Zum Glück muss man nicht jede Mode mitmachen...

    NULL ist manchmal besser zu lesen als 0! Just my 2 cents



  • Martin Richter schrieb:

    NULL ist manchmal besser zu lesen als 0! Just my 2 cents

    Ist wohl wieder 'mal eine Glaubensfrage 😉

    greetz, Swordfish



  • Und wann wird ((void *)0) benutzt?

    Ich habe meiner Datei die Endung *.c gegeben.
    Wird das dann trotzdem mit einem C++-Kompiler und dem Makro __cplusplus kompiliert/gelinkt?



  • Nein, wenn Deine Datei die Endung *.c hat, wird es also C compiliert. Das kannst Du aber mit Project-Settings für die Datei wieder ändern (/Tp)



  • Das Makro __cplusplus war aber trotzdem definiert..



  • Martin Richter schrieb:

    Zum Glück muss man nicht jede Mode mitmachen...

    NULL ist manchmal besser zu lesen als 0! Just my 2 cents

    Ein Grund mehr, sich auf nullptr zu freuen :p


Anmelden zum Antworten