gpt4 book ai didi

delphi - 在后台 (kibitz) 编译器中跳过源代码

转载 作者:行者123 更新时间:2023-12-03 15:17:38 25 4
gpt4 key购买 nike

我在 Delphi7 中的后台编译器遇到问题:在我的项目中,有一行代码导致后台编译器停止并显示错误消息,因此无法进行 CodeCompletion。正常的编译器和语法检查对这段代码没有问题,生成的应用程序是正确的。

我的问题是,在执行后台编译时是否有任何方法可以跳过此代码行(例如编译器指令)。

重现错误的示例代码:

procedure ProduceKibitzError;
var
v : Variant;
begin
v.End; // This line stops kibitz compiler
end;

此代码放置在主单元中使用的单元“Error.pas”中。如果您尝试在主单元中调用 CodeCompletion,它将停止并显示消息“Error.pas 无法编译”(真正的消息是德语)。

有趣的是,该错误仅在第一次编译项目或执行语法检查时才会发生。编译后,CodeCompletion 开始工作,并且必须重新启动 Delphi 才能重现该错误。

更新:添加带有结束标签的空汇编器 block 是解决该问题的方法。以下是更改后的示例代码,不会停止后台编译器:

procedure ProduceKibitzError;
var
v : Variant;
begin
asm
@@END:
end;
v.End;
end;

非常感谢,

基督教

最佳答案

后台编译器在解析到光标位置时不进行过程体分析。相反,它使用简单的语法匹配(例如 begin/end 对)。如果简单的语法匹配表明单元中的最终end已经满足,那么它会提前退出。

这就是您的示例中发生的情况。第一个 End 标记不会被后期绑定(bind)逻辑转义,因为它没有被真正的表达式编译器解析,而是被读取为过程的结尾。第二个 end 看起来像是单元的结尾,后台编译器再也看不到任何进一步的内容。

已添加:您可以尝试向此例程添加一个空的 asm/end block 。它可以防止 kibitz 编译器跳过过程分析。 Graphics.pas 有一个带有 @@end 标签的 asm/end block ,因此编译器会专门处理 asm/end block 。

关于delphi - 在后台 (kibitz) 编译器中跳过源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1254195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com