Wie kann ich die Warnung „Rückgabewert möglicherweise undefiniert“ deaktivieren?
-
25-09-2019 - |
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.
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.