Frage

Ich möchte eine bestimmte Warnung (W1035) in meinem Code deaktivieren, da ich denke, dass der Compiler in dieser Warnung falsch ist:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;

Es gibt keine Möglichkeit, dass das Ergebnis undefiniert sein könnte, da Abort Würfe EAbort.

Ich habe es versucht:

  • {$WARN 1035 Off}: Anscheinend funktioniert dies nur für bestimmte Fehler (siehe Dokumentation)
  • {$W-1035}: Macht überhaupt nichts

Ich weiß, ich kann die Warnung in den Projektoptionen weltweit ausschalten oder verwenden {$WARNINGS OFF}, aber das ist nicht das, was hier beabsichtigt ist.

Bearbeiten: Ich habe das jetzt als #89744.

War es hilfreich?

Lösung

Sie können diese Warnung nicht weltweit deaktivieren, aber Sie können das verwenden {$WARN NO_RETVAL OFF} Um die Warnung lokal zu deaktivieren.

{$WARN NO_RETVAL OFF}
function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;
{$WARN NO_RETVAL ON}

Andere Tipps

Ich habe momentan keinen Delphi -Compiler zur Verfügung, sondern um den Code neu zu ordnen, um die zu entfernen if..else könnte die Warnung verschwinden lassen:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal <> mrOk then
    Abort;

  Result := TOption(rdgAction.EditValue);
end;

Siehe auch Wie deaktiviere ich eine Warnung in Delphi vor „Rückgabewert… könnte undefiniert sein“?.

Sie können einen ordentlichen Trick verwenden, um den Compiler zu täuschen. Definieren Sie eine Bibliotheksfunktion als SO:

procedure Abort(var X);
begin
  SysUtils.Abort;
end;

Sie können dann Ihre Funktion als:

if ShowModal = mrOk then
  Result := TOption(rdgAction.EditValue)
else
  Abort(Result)

Der Compiler glaubt, dass Sie zu Ergebnissen geschrieben wurden, da es sich um einen VAR -Parameter handelt und das Blöten aufhört.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top