null oder nullptr? und wie bringe ich VC++ dazu das zu akzeptieren?
-
Hi Leute,
Ich bin kein besonders guter C++ programmierer, zugegeben.
Ich will nun eine dynamische Liste erstellen (für einen Quicksortalgorithmus).Das Ende der Liste hat bisher immer auf NULL gezeigt. Aber wie ich nun lesen musste ist das nicht mehr gewünscht und ich soll dafür NULLPTR verwenden (VC++).
Nur sagt die MSDN Libery ich soll dafür den Compilermodus /clr einstellen.
Doch wenn ich das tue schmeist er mich wieder raus, und sagt das ich mit mehreren anderen Compilermodis nicht kompatibel.
Wieso baut Micro$oft einen Standard ein, der dann nicht kompatibel ist, und mit den eigenen deafult einstellungen kollidiert?
Hier meine einstellungen:
Ich benutze VC++ 2008
Das sind die default Compilereinstellungen:/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:promptBei der Anwendung handelt es sich (wie oben sichtbar) um eine Standard Consolen anwendung, die über einen Port daten entfängt, diese interpretieren und sortieren soll und diese dann wieder zurückschickt...
Meine Frage ist: ist NULL nun oder NULLPTR der bessere Weg, und wie bringe ich VC++ dazu den /clr modus zu akzeptieren?
mfg
methanch4Edit: ... und wenn man standart richtig schreiben würde, wird es sicher auch nicht ausgeixt...
-
Wenn Du C++ codierst verwende 0.
Wenn Du C++/CLI codierst (/clr o.ä.) verwende nullptr (gross geschrieben gibts das nicht).
Simon
-
ich habe das zwar jetzt nicht ganz verstanden (warum man jetzt mehrere Standarts hat), aber ok

meint ihr, man wird mir den Kopf abreissen, wenn ich ein
#define NULL 0in meinen Code einbaue?
Ich finde es schon nützlich für die Lesbarkeit des Codes eine 0 (integer) und NULL ((nicht_)pointer) voneinader zu unterscheiden...
mfg
methanch4
-
ich habe das zwar jetzt nicht ganz verstanden (warum man jetzt mehrere Standarts hat), aber ok
Achtung: C++ und C++/CLI sind zwei verschiedene Sprachen. Genauso wie C und C++. Jedoch erlauben diese Sprachpaare eine sehr enge/gute Interoperabilität untereinander.
-
Die Regel ist Simpel:
Wenn Du C++/CLI mit Referenz-Typen verwendest (erkennbar am ^-zeichen), dann musst Du "nullptr" verwenden, ansonsten immer "NULL" oder "0".
-
methanch4 schrieb:
meint ihr, man wird mir den Kopf abreissen, wenn ich ein
#define NULL 0in meinen Code einbaue?
Ich würde das, ja (also dir den Kopf abreissen)

Z.B. schonmal deswegen weil "NULL" oft in den Compiler-Headern irgendwo definiert wird - das kracht dann schön wenn mans selbst definiert.
Schreib einfach "0".
-
Damit Dir hustbaer nicht den Kopf abreist kannst Du ja schreiben:
#ifndef NULL #define NULL 0 #endif
-
Meine persönliche Meinung: "NULL" ist C, wenn Du C++ programmierst, dann benutze "0". Nicht umsonst soll der nächste C++ Standard ja auch einen "nullptr" enthalten. NULL selbst ist nicht Bestandteil des C++ Standards, Bjarne Stroustrup selbst bezeichnet es als "the infamous NULL macro".
Standard Quizfrage für C++-Anfänger dazu:
struct A { void func() {} void func(void * p) {} void func(char p) {} void func(char * p) {} void func(int p) {} void func(int * p) {} } A a; a.func(NULL);Welches func() wird bei func(NULL) aufgerufen und warum?
P.S. Alle Nicht-Anfänger halten sich bitte jetzt mal zurück....
-
Das zweite func()?
-
Probiers doch einfach aus...
Es hängt natürlich davon ab, wie "NULL" definiert wurde!
Bei
#define NULL (void*) 0mag es ja stimmen...
-
sebastian87 schrieb:
Das zweite func()?
Und schon wieder eine in die Falle getappt..... Nein, in C++ wird func(int p) aufgerufen, da NULL ein (const) int ist/sein soll, siehe 5.1.1 in "The C++ Programming Language" von Bjarne Stroustrup.
P.S: Mal abgesehen davon dass "0" weinger Tipparbeit ist als "NULL"
