Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Kein Breakpoint auf result in if Abfrage möglich

  Alt 3. Mär 2011, 19:57
Das "Problem" ist, dass der Compiler intelligent ist und sieht, dass Result später eh gesetzt wird und diese Zeile quasi gar nicht ins Programm mit eincompiliert wird.

Delphi-Quellcode:
function TSudoku.SudokuBacktrack(row,col:integer):boolean;
var
zaehl:integer;
begin
  if col = 8 then
    begin
      inc(row);

      if row=8 then
        begin
         result:=false; // Selbst wenn du hier Result setzt
         row:=1;
        end;
      col:=0;
    end;
  if SudokuFeld[row][col] > 0 then
    result:=SudokuBacktrack(row, col+1);
  for zaehl:=1 to 9 do
    begin
      if (CheckCol(Col,zaehl)) and (CheckRow(Row,zaehl)) and (CheckBlock(Row,Col,zaehl)) then
          begin
            SudokuFeld[row][col]:=zaehl;
            if SudokuBacktrack(row, col+1) then
              result:=true;
          end;
    end;
  SudokuFeld[row][col]:=0;
  result:=false; // Wird es hier überschrieben!
end;
Vielleicht sollte man hier noch erwähnen, dass ein Result := <WERT>; nicht dem return von PHP/C/C++ etc. entspricht. Du musst für das Setzen und gleichzeitge verlassen der Methode zwei Zeilen aufrufen:
Delphi-Quellcode:
Result := <WERT>;
Exit;
Seit Delphi XE ist auch folgendes möglich:
Exit(<WERT>);
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k ( 3. Mär 2011 um 20:02 Uhr)
  Mit Zitat antworten Zitat