提防Exit
内联函数中的命令用法!我这里一直使用Delphi XE3。
Symptom
在某些情况下,当调用包含以下内容的内联函数时Exit
命令,以及返回值使用内联函数的directly in WriteLn()
,编译器报告错误消息,
“dcc”退出,代码为 1。
或者更糟糕的是,Delphi IDE 在没有任何确认的情况下终止。
function ProcessNumber(const iNumber: Integer): Boolean; inline;
begin
if iNumber = 0 then begin
Result := False;
Exit;
end;
// some code here ...
Result := True;
end;
procedure Test;
begin
writeln( ProcessNumber(0) );
end;
begin
Test;
ReadLn;
end.
然而,如果返回值内联函数的内容存储在变量中,然后在中使用该变量WriteLn()
,问题不会发生。
procedure Test;
var
b: Boolean;
begin
b := ProcessNumber(0);
writeln(b);
end;
问题
- 这是编译器错误吗?
- 如果这是一个错误,是否有解决方法可以安全地退出内联函数?
这肯定是一个错误。它出现在我测试的所有 IDE 版本中,XE3、XE7 和 XE8。老实说,我不认为你能做很多事情。对我来说,IDE 每次都会在编译时终止。我认为您只需以不会导致 IDE 崩溃的方式编写代码即可。
您可以使用强制编译使用 msbuild 的 IDE 选项。这会将编译放入一个单独的进程中,从而确保 IDE 不会崩溃。但这对你没有多大帮助,因为虽然你的 IDE 不会一直死机,但你仍然无法编译你的程序!
当您使用 msbuild 进行构建时,您会收到以下形式的错误:
错误 F2084:内部错误:GPFC00000FD-004D3F34-0
GPF 代表一般保护错误,即内存访问违规。这可能是一个未处理的异常,在编译过程中执行时会终止 IDE。
我的建议是您将错误报告提交给质量门户。这是修复缺陷的唯一方法。尽管不要指望 XE3 会出现修复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)