这是Delphi Xe8编译器错误吗?

时间:2015-07-03 14:43:44

标签: delphi delphi-xe8

以下语句正确编译:

procedure test ;
var    xx : string;
begin
   xx := 'a' + '}' + 'b';
end;

如果您尝试使用块注释进行注释,则编译器会错误地考虑 文本中的右括号作为评论的结尾。

procedure test ;
var    xx : string;
begin
  {   xx := 'a' + '}' + 'b';  }
end;

我错过了什么吗?

1 个答案:

答案 0 :(得分:8)

当您打开注释时,解析器只会忽略后面的文本,直到找到相应的注释终止。

  • //的情况下,终止是该行的结束。
  • 如果是(*,则终止是*)的下一个实例。
  • 如果是{,则终止是}的下一个实例。

由于编译器不解析注释掉的文本,因此它发生在字符串中的}并确定注释已终止。

你说:

  

编译器错误地将文本中的右括号视为注释的结尾。

在我强调的文本中可以看到本声明中的错误思考。评论开始后,解析器不关心语法,引用或任何事情。它只是读取源,直到它找到注释终止。它不关注评论终止符所在的上下文。

因此,这不是编译器错误。正如设计的那样,编译器的行为正确。