Delphi 似乎忽略了我的一些代码行?

Posted

技术标签:

【中文标题】Delphi 似乎忽略了我的一些代码行?【英文标题】:Delphi seems to ignore some of my lines of code? 【发布时间】:2020-03-31 20:22:41 【问题描述】:

我正在开发一个 VCL Delphi 应用程序,但 Delphi 似乎拒绝执行我的某些代码行,DrawLine 是一个私有函数...

if not(FirstCoords) then
        begin
          firstcoords := true;
          xCo1 := xCoPre + LeftOffset;
          yCo1 := yCoPre + TopOffset;
        end
      else
        begin
          xCo2 := xCoPre + LeftOffset;
          yCo2 := yCoPre + TopOffset;
          DrawLine(xCo1, xCo2, yCo1, yCo2);
          bbtFieldScale.Click;
        end;

当我逐步调试时,它会执行 If,然后继续将“firstcoords”设置为 true,然后只是跳转到 If 的末尾,甚至没有触及其他两行...如果我添加这样一行如下面的代码,那么它似乎执行了代码......

if not(FirstCoords) then
        begin
          firstcoords := true;
          xCo1 := xCoPre + LeftOffset;
          yCo1 := yCoPre + TopOffset;
          showmessage(inttostr(xCo1+yCo1));
        end
      else
        begin
          xCo2 := xCoPre + LeftOffset;
          yCo2 := yCoPre + TopOffset;
          DrawLine(xCo1, xCo2, yCo1, yCo2);
          bbtFieldScale.Click;
        end;

请帮忙,我将不胜感激:)

我已禁用优化,但它似乎仍然拒绝...

【问题讨论】:

我的猜测是代码被优化掉了,因为您没有使用任何计算值。通常,您在编译代码时会收到警告。但我们需要先看到一个完整的代码示例来展示这种行为,然后才能得出任何结论。 用minimal reproducible example 回答很容易。顺便说一句,永远不要写 if bool = falseif bool = true。而是写if not boolif bool 我现在将 yCo1、xCo1 变量更改为全局变量,它似乎对此很满意。我假设优化然后相信它在其他地方很重要。 【参考方案1】:

当有问题的操作被优化时,您所描述的就会发生,因为分配给的变量没有在代码中的其他任何地方使用,并且编译器在消除这些操作时没有发现明显的副作用.

一旦您添加了ShowMessage(),相关变量就会变得相关,因此它们的分配不能再被消除。

【讨论】:

此外,如果您需要调试已编写的未使用代码,因为稍后会很重要,明显的建议是切换到禁用优化的调试版本,以便编译器将不要消除未使用的代码。

以上是关于Delphi 似乎忽略了我的一些代码行?的主要内容,如果未能解决你的问题,请参考以下文章

我的 WindowsForm 只是忽略了一些代码行,我不知道为啥?

如何合并行中重复的单元格值?我的代码忽略了一些重复的值

ML 模型无法估算值

ZeroMQ API 似乎忽略了我的 PUB

命令行错误 - 最后一个参数被忽略?

知名项目约100万。代码行? [关闭]