How to disable a warning in Delphi about “return v

2020-07-06 11:09发布

I have a function that gives me the following warning:

[DCC Warning] filename.pas(6939): W1035 Return value of function 'function' might be undefined

The function, however, is clean, small, and does have a known, expected, return value. The first statement in the function is:

Result := '';

and there is no local variable or parameter called Result either.

Is there any kind of pragma-like directive I can surround this method with to remove this warning? This is Delphi 2007.

Unfortunately, the help system on this Delphi installation is not working, therefore i can't pop up the help for that warning right now.

Anyone know off the top of their head what i can do?

6条回答
啃猪蹄的小仙女
2楼-- · 2020-07-06 11:32

In order to get a good answer for this, you'll have to post the code. In general, the Delphi compiler will give this warning if there is a possible code path that could result in the Result not being defined. Sometimes that code path is less than obvious.

查看更多
可以哭但决不认输i
3楼-- · 2020-07-06 11:37

There is such a bug in Delphi compiler since, at least, Delphi4: if sum of numbers of function's parameters (including Self and Result) and local variables exceeds 31, it causes problems. For example, it can write W1035 warnings (result might be undefined). It can miss not used variables. Just try this project:

program TestCompilerProblems;

procedure Proc;
var
  a01, a02, a03, a04, a05, a06, a07, a08, a09, a10,
  a11, a12, a13, a14, a15, a16, a17, a18, a19, a20,
  a21, a22, a23, a24, a25, a26, a27, a28, a29, a30,
  a31, a32, a33, a34, a35, a36, a37, a38, a39, a40: Integer;
begin
end;

begin
  Proc;
end.

It would cause 31 hint, not 40.

查看更多
Ridiculous、
4楼-- · 2020-07-06 11:38

I am not sure that I want to see the code for this unit... after all, the error occurs at line 6939 ... Maybe some internal compiler table have been exceeded?

查看更多
▲ chillily
5楼-- · 2020-07-06 11:38

The {$WARN NO_RETVAL OFF} is what you are looking for, but generally I like to find out why stuff like this happens. You might consider formatting it differently and seeing if that helps.

Do you have any flow altering commands like Exit in there? Do you directly raise exceptions, etc? Does your case statement have an else at the end that sets a value on Result?

Might try tweaking those elements and see if that eliminates the warning too.

查看更多
We Are One
6楼-- · 2020-07-06 11:42

Are you sure you have done everything to solve the warning? Maybe you could post the code for us to look at?

You can turn off the warning locally this way:

{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}
查看更多
闹够了就滚
7楼-- · 2020-07-06 11:43

There seems to be some sort of bug in Delphi. Read this post, the last comment links to other bug-reports that may be the one that you have got:

http://qc.codegear.com/wc/qcmain.aspx?d=8144

查看更多
登录 后发表回答