【问题标题】:Compiler ignores missing parenthesis of Exit command编译器忽略 Exit 命令缺少的括号
【发布时间】:2012-05-09 22:04:32
【问题描述】:

为什么 Delphi 编译器会忽略这个缺失的括号?

function Test: Boolean;
begin
  Exit(True;    // <-- eek! it compiles...
end;

我发现我的一些代码看起来像这样,并且首先认为 Delphi 忽略了我的单元 - 但它只是忽略了这种类型的语法错误。所以现在我当然想知道为什么。

【问题讨论】:

  • 这在我看来像是编译器中的一个错误。
  • 在 XE2 更新 4 中相同。但错误洞察力标记了它。
  • 哦, - 与泛型相关的编译器错误
  • @RBA Exit 参数在 Delphi 2009 IIRC 中引入
  • 不能在 Free Pascal 2.7.1 下编译,即使在 Delphi 模式下,FWIW(说 致命:语法错误,“)”预期但“;”发现),所以它看起来确实像一个编译器错误。

标签: delphi delphi-2009 delphi-xe


【解决方案1】:

我猜Exit 被认为是其自身的一个标记,因此在Exit 之后在同一范围内定义的任何内容都会被编译器忽略(因为它无论如何都无法执行这些指令)。

【讨论】:

  • Exit(True; 之后添加指令会使编译器再次抱怨“E2066 Missing operator or semicolon” (Delphi XE)。
  • 我猜这是因为分号提示编译器尝试编译下一条指令。
  • 基本上我是说Exit 是一个“绝对”标记,提示编译器忽略同一语句中的任何后续字符,直到下一次出现分号,它将它与程序分开指示)。这肯定是个怪癖……而且是一个有趣的发现!
【解决方案2】:

也许编译器认为 1. 本身有出口,或 2. 有一个带有一组括号 () 的 Exit。 如果它没有找到#2,它会转到#1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多