Comment puis-je désactiver temporairement l'avertissement « valeur de retour peut être indéfini »?
-
25-09-2019 - |
Question
Je veux désactiver un avertissement spécifique (W1035) dans mon code, car je pense que le compilateur se trompe sur cet avertissement:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort
end;
Il n'y a aucun moyen le résultat pourrait être indéfini, puisque Abort
jette EAbort
.
J'ai essayé:
-
{$WARN 1035 Off}
: Apparemment, cela ne fonctionne que pour quelques erreurs spécifiques (voir Documentation ) -
{$W-1035}
: Ne fait rien du tout
Je sais que je peux désactiver l'avertissement à l'échelle mondiale dans les options de projet, ou à l'aide {$WARNINGS OFF}
, mais ce n'est pas ce qui est prévu ici.
Modifier. Je QC'ed ce maintenant # 89744
La solution
vous ne pouvez pas désactiver cet avertissement au niveau mondial, mais vous pouvez utiliser le {$WARN NO_RETVAL OFF}
pour désactiver l'avertissement localement.
{$WARN NO_RETVAL OFF}
function TfrmNagScreen.Run: TOption;
begin
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort
end;
{$WARN NO_RETVAL ON}
Autres conseils
Je n'ai pas un compilateur Delphi disponible pour le moment, mais réarranger le code pour enlever le if..else
peut-être faire l'avertissement disparaître:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal <> mrOk then
Abort;
Result := TOption(rdgAction.EditValue);
end;
Voir aussi Comment désactiver un avertissement dans Delphi de « valeur de retour ... peut-être non défini »? .
Vous pouvez utiliser une astuce pour tromper le compilateur. Définir une fonction de bibliothèque comme ceci:
procedure Abort(var X);
begin
SysUtils.Abort;
end;
Vous pouvez alors écrire votre fonction:
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort(Result)
Le compilateur pense que vous avez écrit à Résultat car il est un paramètre var et il cesse de bêler.