Zitat von
Noobinator:
Wer sagt mir denn das es in 10 Jahren nicht ein Compiler gibt, der diesen Ausdruck standardmäßig auf false Prüft, und nicht wie Delphi auf true?
Was sagt dir, dass in 10 jahren Delphi "=" imemr noch als Gleicheitszeichen interpretiert und nciht als ungleich
Die Sache ist einfach die, das Boolean intern ein Byte groß ist. Wenn dieses Byte den Wert 0 hat, bedeutet das "Aus". Jeder Wert <> 0 bedeutet "An".
Das Problem ist, dass die Konstanten True und False als 0 und 1 festgelegt sind. Wenn du also "=True" schreibst, wird also nicht auf Wahrheit überprüft, sondern auf die Zahl 1. Da kann es passieren, dass eine Prüfung false ergibt, obwohl sie wahr gewesen wäre: In VB bedeutet True beispielsweise nicht 1, sondern -1. Wenn du nun den Rückgabewert aus einer VB-
Dll prüfst, wird deine Schreibweise imemr False ergeben!
Theoretisch könnte man zumindest "variable = false" schreiben statt "not variable", aber erstens ist letzteres kürzer und zweitens ist es konsequenter.
Ein kleines Konsolenprogramm zum Beweisen:
Delphi-Quellcode:
var
b: boolean;
s: string; // Für Readln
begin
b := true;
writeln('Test 1: b='+inttostr(ord(b)));
if b then
writeln(' a) Wahr')
else
writeln(' a) Falsch');
if b=True then
writeln(' b) Wahr')
else
writeln(' b) Falsch');
b := boolean(byte(-1));
writeln('Test 2: b='+inttostr(ord(b)));
if b then
writeln(' a) Wahr')
else
writeln(' a) Falsch');
if b=True then
writeln(' b) Wahr')
else
writeln(' b) Falsch');
readln(s); // Damit sich das Prrogramm nicht sofort beendet
end.
Ich hoffe, ich habe es einigermaßen verständlich rüberbringen können (Habs manchmal nicht so mit dem Erklären^^)
//Edit: kein roter Kasten... naja schadet ja nicht
//Edit²: @quendolineDD: Uppsi, sorry ._. Ich weiß wirklich nicht, wie das passiert ist^^ Hab's geändert.