Was ist der Unterschied zwischen NULL und false?

Thomasio

Erfahrenes Mitglied
Irgendwie ist mir schon klar, was der Unterschied ist, aber so ganz begreife ich trotzdem nicht, was das Ganze soll.

Wenn ich z.B. ein Fenster neu zeichnen will, was verwendet man, und warum?

InvalidateRect(MyWindow,NULL,false);
InvalidateRect(MyWindow,0,false);
InvalidateRect(MyWindow,0,0);
 
false ist die Zahl 0,
NULL kommt aus dem Pointerbereich; ein Pointer kann den Wert haben damit man weiß dass er "nirgends" hinzeigt
NULL ist (je nach C/C++) definiert als normale Zahl 0 / (void *)0
der Cast soll bewirken, dass der Compiler nicht warnt, wenn man einem
Pointer eine pure Zahl zuweist (mir fällt zurzeit kein anderer Grund ein...ist schon spät...)

Gruß
 
Hallo,

einfach hier nachlesen. In deinen Fall wird mit null einfach ein Bereich reserviert dem noch kein Wert zugewiesen werden kann. Wo bei 0 und false einen Wert darstellt.

Gruss
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich das mal zusammenfasse:

- false ist die Zahl 0
- NULL ist (je nach C/C++) definiert als normale Zahl 0 / (void *)0

dann denke ich mir mal, es macht absolut keinen Unterschied, was ich im ValidateRect() schreibe.

Ich verstehe ja noch, dass ein Pointer nach nirgendwo was Anderes ist als die Zahl 0, aber wozu braucht es noch extra ein "false"?
Ich habe gerade mal zum testen in einem kleinen Programm alle
NULL und false durch die Zahl 0
und alle
true durch die Zahl 1 ersetzt

Mein Compiler meckert nicht, und das Ganze scheint nach wie vor ohne Probleme zu funktionieren.
Falls ich jetzt gerade auf dem Holzweg bin und irgendeinen wichtigen Grund übersehe, warum ich das nicht so machen sollte, wäre ich dankbar für einen Hinweis dazu.
 
false ist die Zahl 0,
Das ist falsch. false ist einer der beiden möglichen Werte des Typs bool (siehe 3.9.1(6)). Was du meinst, ist vermutlich, dass false bei der Konvertierung in int zu 0 wird (4.5(4)).

NULL ist (je nach C/C++) definiert als normale Zahl 0 / (void *)0
der Cast soll bewirken, dass der Compiler nicht warnt, wenn man einem
Pointer eine pure Zahl zuweist (mir fällt zurzeit kein anderer Grund ein...ist schon spät...)
Der Cast soll vor allem bewirken, dass NULL zur Nullzeigerkonstate wird und nicht zur Zahl 0. Die dclc-FAQ widmet dem Thema ein ganzes Kapitel.

Grüße,
Matthias
 
Zurück