Joar, irgendwer sitzt auch grade fett auf der Leitung, so langsam wie das hier ist.
Nja, dein Code lässt sich bei mir nichtmal kompiliere.
Auf die schnell sah der Code daher auch bissl anders aus.
Zitat:
if i mod 2 then // [dcc32 Fehler] E2012 Ausdruckstyp muss BOOLEAN sein
In Pascal nimmt IF-THEN nur Boolean-Typen entgegen,
falls FreePascal das im
nicht-delphi-kompatiblen Modus das macht, dann naja. (dann da halt wie im C/C++)
Aufgrund der länge hatte ich irgendwie etwas wie
x := x + 1;
oder
+ i
gesehn.
Dort kommt dann ohne das erste
x := 0;
natürlich zuerst der Fehler vonwegen nicht initialisiert.
So kommt in vielen Delphis bei Beidem
[dcc32 Hinweis] H2077 Auf 'x' zugewiesener Wert wird niemals benutzt
.
Bei Schleifen und IFs wird nicht beprüft ob und wieoft etwas ausgeführt wird.
Nur da wo untypisierte Konstanten im IF vorkommen, und sich das durch die Codeoprimierung auf einen einzelnen Boolean kürzen lässt, da weiß dann der Compiler ob der nachfolgende Code im IF niemals ausgeführt wird und ignoriert ihn dann. (wegoptimiert diesen Codeteil)
Also weiß der Compiler nicht, dass das
X:=
in der Schleife ausgeführt wird und somit auch nicht ob das vorherrige
X:=
überhaupt nicht nötig ist.
Delphi-Quellcode:
var
x, i: Integer;
begin
x := 0; // [dcc32 Hinweis] H2077 Auf 'x' zugewiesener Wert wird niemals benutzt
for i := 0 to 10 do
//if i mod 2 then // [dcc32 Fehler] E2012 Ausdruckstyp muss BOOLEAN sein
if i mod 2 <> 0 then
x := i; // [dcc32 Hinweis] H2077 Auf 'x' zugewiesener Wert wird niemals benutzt
//if x = 0 then ;
end;
Aber sicher ist hier, dass die Zuweisungen definitiv niemals verwendet werden und seit Delphi 4 hat mich Delphi immer darauf hingewiesen, kann mich jedenfalls nicht erinnern, dass es mir mal nichts gesagt hätte.