为什么我的"if"语句似乎没有运行?

use*_*325 5 delphi debugging

我正在从C#叛逃到Delphi 2009,我非常喜欢它.

我写了一个二进制搜索程序,工作正常.我在proc的末尾添加了一个简单的if-else语句,它只是不会触发!我看不出有什么不妥,我不好意思说我被卡住了.请帮忙!

procedure BinSearch;
var
  min,max,mid, x: integer;
  A : array[0..4] of integer;
  rslt : integer;

begin

  writeln('binary search');
  A[0] := 34; A[1] := 65; A[2] := 98; A[3] := 123; A[4] := 176;
  listarray(a);
  x := 62;
  min := 0;
  max := 4;

  repeat
    begin
    mid := (min + max) div 2;
    if x > A[mid] then
      min := mid + 1
    else
      max := mid - 1;
    end;
  until (A[mid] = x) or (min > max);

  writeln(mid);
  writeln(a[mid]);

  if A[mid] = x then
    rslt := mid
  else
    rslt := not mid;

  if 54 = 65 then
    rslt := mid
  else
    rslt := not mid;

end;
Run Code Online (Sandbox Code Playgroud)

这是if A[mid] = x then一个不会开火的人.在调试true或false分支时,调试器只是直接跳过它们.另外,if 54 = 65 then这只是一个测试也是一样的.

我的重复循环里面的if工作正常.

如果我将问题if语句复制到一个迷你测试过程中,然后调用proc它就可以了,所以它让我觉得它在proc中的其他东西就像一个缺失;导致一些奇怪的事情发生但我看不到它.请帮忙!

Inc*_*onk 14

Delphi编译器非常智能,它很乐意删除未使用的代码.当我编译你的代码时,我得到了编译器提示,说"分配给'rslt'的值从未使用过".由于永远不会使用该值,因此编译器只会跳过这些语句.

如果Writeln(rslt);在过程结束时添加一个,则会发现调试器现在将跟踪您的if语句.


Mar*_*ins 4

调试器可能只是跳过这些语句,即使它们实际上正在运行。确保调试选项中的所有选项均已打开。在 Delphi 7 中,它们位于 Compiler 选项卡下的 Project\Options 下。