Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: try finally except Compiler hint H2077 Value assigned to 'Xyz' never used

  Alt 19. Apr 2017, 12:04
Dankesehr für die Antworten und die Mühe.

Ich habe das Beispeil von Günther noch etwas erweitert, um mal genau zu sehen was eigentlich passiert,
siehe Anhang.

Ihr habt natürlich Recht (und der Compiler-Hint auch), ein bischen Nachdenken hilft immer

Delphi-Quellcode:
procedure p();
begin
   raise EProgrammerNotFound.Create('nope');
end;

function TForm1.fCrashable(bShallCrash : Boolean): Integer;
begin
   Result := 88; //H2077 Auf 'f' zugewiesener Wert wird niemals benutzt

   Memo1.Lines.Add( '- In fCrashable.Vorgabe: Result = ' + Result.ToString );

   try
      if bShallCrash then
      begin
          p();
      end;
      Result := 42-1;

      Memo1.Lines.Add( '- In fCrashable.Zwischenwert: Result = ' + Result.ToString );

   finally
      // nothing
      Inc(Result);

      Memo1.Lines.Add( '- In fCrashable.finally: Result = ' + Result.ToString );
   end;


end;

procedure TForm1.Button1Click(Sender: TObject);
var
  iRes: Integer;
begin

   try
      iRes := 1000;

      Memo1.Lines.Clear;
      Memo1.Lines.Add( 'Ohne Crash' );

      iRes := 77; // diese Vorgabe ist überflüssig wenns nicht crasht

      Memo1.Lines.Add( '- Variable vordefiniert auf 77' );

      Memo1.Lines.Add( '- Aufruf fCrashable( False )' );


      iRes := fCrashable(False);

      Memo1.Lines.Add( '- Ergebnis: Result = ' + iRes.ToString );

   except
      Memo1.Lines.Add( '- Exception: Result = ' + iRes.ToString );
   end;


end;


procedure TForm1.Button2Click(Sender: TObject);
var
  iRes: Integer;
begin

   try
      Memo1.Lines.Clear;
      Memo1.Lines.Add( 'Mit Crash' );

      iRes := 77; // diese Vorgabe wird übernommen, im Fall eines Crashes

      Memo1.Lines.Add( '- Variable vordefiniert auf 77' );

      Memo1.Lines.Add( '- Aufruf fCrashable( False )' );

      iRes := fCrashable(True); // Diese Zuweisung wird NICHT ausgeführt bei Crash

      Memo1.Lines.Add( '- Ergebnis: Result = ' + iRes.ToString );

   except
      Memo1.Lines.Add( '- Exception: Result = ' + iRes.ToString );
   end;


end;
Das Ergebnis sieht dann so aus:

clipboard01.jpg

clipboard02.jpg

Viellleicht hilft es ja dem nächsten auch wieder auf die Sprünge.
Ich muss mich jedenfalls wohl mal wieder um ein paar alte Leichen bei mir kümmern.

Rollo
Angehängte Dateien
Dateityp: zip T060_TryFinally.zip (53,2 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat