0

以下语句正确编译:

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

如果您尝试使用块注释进行注释,编译器会错误地将文本中的右括号视为注释的结尾。

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

我错过了什么吗?

4

1 回答 1

8

当您打开注释时,解析器会简单地忽略后面的文本,直到找到适当的注释终止。

  • //在终止的情况下是行尾。
  • (*终止的情况下是 的下一个实例*)
  • {终止的情况下是 的下一个实例}

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

你说:

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

从我强调的文字中可以看出这句话中的错误想法。一旦注释开始,解析器就不再关心语法、引号或其他任何事情。它所做的只是阅读源代码,直到找到注释终止。它不理会该注释终止符所在的上下文。

因此,这不是编译器错误。按照设计,编译器的行为正确。

于 2015-07-03T14:48:33.410 回答