gpt4 book ai didi

delphi - 尝试编译此代码是否会导致 IDE 终止或编译器无法运行?

转载 作者:行者123 更新时间:2023-12-03 14:41:45 26 4
gpt4 key购买 nike

谨防内联函数中的Exit命令用法!我这里一直使用Delphi XE3。

症状

在某些情况下,当调用包含Exit命令的内联函数时,直接使用内联函数的返回值WriteLn()中,编译器报告错误消息,

"dcc" exited with code 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;

问题

  1. 这是编译器错误吗?
  2. 如果这是一个错误,是否有解决方法可以安全退出内联函数?

最佳答案

这肯定是一个错误。它出现在我测试的所有 IDE 版本中,XE3、XE7 和 XE8。老实说,我不认为你能做很多事情。对我来说,IDE 每次都会在编译时终止。我认为您只需以不会导致 IDE 崩溃的方式编写代码即可。

您可以使用强制编译使用 msbuild 的 IDE 选项。这会将编译放入一个单独的进程中,从而确保 IDE 不会崩溃。但这对你没有多大帮助,因为虽然你的 IDE 不会一直死机,但你仍然无法编译你的程序!

当您使用 msbuild 进行构建时,您会收到以下形式的错误:

error F2084: Internal Error: GPFC00000FD-004D3F34-0

GPF 代表一般保护错误,即内存访问违规。这可能是一个未处理的异常,在编译过程中执行时会终止 IDE。

我的建议是您向 Quality Portal 提交错误报告。这是修复缺陷的唯一方法。尽管不要指望 XE3 会出现修复。

关于delphi - 尝试编译此代码是否会导致 IDE 终止或编译器无法运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30692000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com