Visual Studio 2003::"NULL" nichtdeklarierter Bezeichner ??
-
In windef.h auch. Für Win-Programme sollte man aber windows.h includen, wo noch zusätzliche includes gemacht werden.
-
NULL ist in einer handvoll headern definiert (und damit meine ich standardheader, keinen windows quatsch), aber coole leute schreiben sowieso 0 und warten auf das neue nullptr schlüsselwort
-
Unter anderem ist NULL auch in cstddef und cstdlib definiert.
-
Oh mann, solch eine "Standardkonstante" sollte der Compiler schon kennen, ohne das ich irgendwelche Header einbinden muß... aber der "Bug" ist nun weg...
Besten Dank an Alle !! Freundlichst Winn
-
Shade schrieb:
aber coole leute schreiben sowieso 0 und warten auf das neue nullptr schlüsselwort
vor allem, um beim Durchsuchen des Quelltextes nach NULL-Zeigern auf jede 0 aufmerksam gemacht zu werden.
-
nullraff schrieb:
vor allem, um beim Durchsuchen des Quelltextes nach NULL-Zeigern auf jede 0 aufmerksam gemacht zu werden.
oder um keine doofen fehler zu machen:
void f(int); void f(char*); f(0); //f(int) f(NULL); //??
nicht wahr, nicht?
ich habe übrigens noch nie nach NULL Zeigern gesucht. Wozu auch?
Wenn NULL, dann doch bitte ein richtiges NULL und keine 0 die anders aussieht.
-
ansonsten definierst du ihn dir selber... NULL ist eigentlich sowieso überflüssig, ist auch nurn define aus c-zeiten
-
Shade schrieb:
ich habe übrigens noch nie nach NULL Zeigern gesucht. Wozu auch?
z. Bsp. um auf das erwartete nullptr schlüsselwort umzusteigen. Ansonsten fällt mir ehrlich gesagt auch nichts ein, denn ich habe selbst noch nie danach gesucht.
Man macht diese Fehler bei überladenen Funktionen nur, wenn einem nicht bewusst ist, dass NULL momentan 0 ist. Man muss dann halt entweder ein static_cast machen oder in dem speziellen Fall von char * besser einen Leerstring "" übergeben.
-
wie ist das mit DB?
da ist doch NULL wirklich "nichts" und 0 ist ein int mit wert 0
bei java? das gleiche und NULL ist "nichts" ?bei c++ ist alles egal? aha
-
Mir fällt gerade ein, dass nach Einführung des nullptr Schlüsselwortes wahrscheinlich auch static_cast nötig sein wird, wenn eine Funktion z. Bsp. so überladen ist, dass als Parameter jeweils ein Zeiger auf einen jeweils anderen Typ erwartet wird.
Wie soll sich der Compiler entscheiden, wenn einfach nur nullptr übergeben wird?
-
0 ist völlig korrekt, anstatt NULL. Der Standard (4.10) sagt:
A null pointer constant is an integral constant expression 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 [...]#define NULL 0 oder
#define NULL (void*)0ist veraltet und wird u.a. auch vom Herrn Stroustrup als unschön bezeichet.
-
newkid_ schrieb:
wie ist das mit DB?
da ist doch NULL wirklich "nichts" und 0 ist ein int mit wert 0
bei java? das gleiche und NULL ist "nichts" ?bei c++ ist alles egal? aha
Einmal ist es ein int mit dem Wert 0, einmal ein Nullzeiger. Es kann da keine Verwechslungen geben, weil es vom Variablentyp abhängt. Das geht auch bei Java nicht, ein int kann nicht null sein, eine Referenz nicht 0.
-
Oh mann, solch eine "Standardkonstante" sollte der Compiler schon kennen, ohne das ich irgendwelche Header einbinden muß... aber der "Bug" ist nun weg...
Könntest du das näher ausführen? NULL ist kein bestandteil der Sprache. Wieso sollten die einfach als Erweiterung NULL als Schlüsselwort einführen?
Auch MS versucht standard-konform zu sein und führt nicht grundlos solche sinnlosen Schlüsselwörter ein.
-
7H3 N4C3R schrieb:
0 ist völlig korrekt, anstatt NULL.
Blödsinn. Denn wie du in C.2.2.3 nachlesen kannst
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).
ist NULL sehr wohl "korrekt". Nur wie bereits erwähnt, nicht sonderlich schön. Wohl dem, der 'ne Null-Pointer Klasse benutzt.
Zumindest solang, bis das Schlüsselwort kommt.
-
Sollte nicht ausdrücken, dass NULL falsch oder ungültig ist. Nur wie man auch sieht, kommt es aus der C Standard Library und ist ein unschönes Überbleibsel, was man aber immernoch weiter benutzen kann.