以下语句正确编译:
procedure test ;
var xx : string;
begin
xx := 'a' + '}' + 'b';
end;
如果您尝试使用块注释进行注释,编译器会错误地将文本中的右括号视为注释的结尾。
procedure test ;
var xx : string;
begin
{ xx := 'a' + '}' + 'b'; }
end;
我错过了什么吗?
以下语句正确编译:
procedure test ;
var xx : string;
begin
xx := 'a' + '}' + 'b';
end;
如果您尝试使用块注释进行注释,编译器会错误地将文本中的右括号视为注释的结尾。
procedure test ;
var xx : string;
begin
{ xx := 'a' + '}' + 'b'; }
end;
我错过了什么吗?
当您打开注释时,解析器会简单地忽略后面的文本,直到找到适当的注释终止。
//
在终止的情况下是行尾。(*
终止的情况下是 的下一个实例*)
。{
终止的情况下是 的下一个实例}
。由于编译器不解析注释掉的文本,它发生在你}
的字符串内并确定注释已终止。
你说:
编译器错误地将文本中的右括号视为注释的结尾。
从我强调的文字中可以看出这句话中的错误想法。一旦注释开始,解析器就不再关心语法、引号或其他任何事情。它所做的只是阅读源代码,直到找到注释终止。它不理会该注释终止符所在的上下文。
因此,这不是编译器错误。按照设计,编译器的行为正确。