是否是试图编译此代码的错误导致IDE终止或编译器无法运行?

阿斯塔罗斯

注意Exit内联函数中命令用法!我在这里一直在使用Delphi XE3。

症状

在某些情况下,当调用包含Exit命令的内联函数,并且内联函数的返回值直接用于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;

问题

  1. 这是编译器错误吗?
  2. 如果存在此错误,是否有解决方法可以安全地从内联函数退出?
戴维·赫弗南

这肯定是一个错误。它发生在我测试过的所有IDE版本中,即XE3,XE7和XE8。老实说,我认为您不能做很多事。对我而言,IDE每次都会终止于编译。我认为您只需要编写不会导致IDE崩溃的代码即可。

您可以使用IDE选项强制编译使用msbuild。这将编译置于单独的过程中,从而确保IDE不会崩溃。但是,这对您没有多大帮助,因为尽管您的IDE不会持续崩溃,但是您仍然无法编译程序!

使用msbuild进行构建时,会出现以下形式的错误:

错误F2084:内部错误:GPFC00000FD-004D3F34-0

GPF代表常规保护错误,即内存访问冲突。据推测,这是一个未处理的异常,在进行编译时会杀死IDE。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否由于编译器对RefCell的特殊了解而导致此错误?

即使C ++编译器无法编译,为什么C编译器仍可以编译此代码?

MSVC 是否有解决此代码的“内部编译器错误”的方法?

为什么编译此代码会导致编译器堆栈溢出?

Intellij IDEA:无法从编译器错误导航到源

使用编译器运行代码后出现段错误

错误的重载导致编译器错误

该代码是否由于编译器错误而无法构建?

无法访问的代码编译器错误

代码::块无法生成/编译器错误?

是否允许此编译器转换?

DataBinding导致Kotlin编译器错误

Live Sass编译器-@use导致编译错误

编译致命错误:无法运行 ecj 编译器:无法识别的选项:--module-version

无法运行编译器“ cl”

Java导入程序包将无法正常工作[编译器会引发误导性错误]

为什么此嵌套的通用类型转换会导致编译器错误

试图理解反编译器抛出的伪代码

使用相同的代码,为什么 MVS 2019 编译此代码但 Codewars 编译器有一些错误?

我在代码块编译器中运行代码时出现代码错误

为什么此模板变量导致编译器警告?

此代码是否利用Java编译器泛型验证限制

Flash IDE编译器以两倍的速度运行

比较器 reversed() 导致编译器错误

_MM_TRANSPOSE4_PS是否在GCC中导致编译器错误?

什么是 ?和@符号表明此编译器错误?-Visual Studio 2013编译器

为什么Java编译器不重写此代码?

兼容的Java编译器可以优化此代码吗?

为什么编译器不优化此代码