我有一個用Delphi 7編寫的程序,似乎遇到了一些邏輯問題。即使在我的觀察窗口顯示它應該時,下面的行也不會給出真正的值。德爾福7布爾方程不起作用
Seq^.step[1] :=
(PlcStart^ and (not Seq^.Step[2])) or
(RetryDelay^.Done and (not Seq^.Step[2])) or
(Seq^.Step[1] and (not Seq^.Step[reset_]));
我的手錶窗口顯示(PlcStart^ and (not Seq^.Step[2])) or (RetryDelay^.Done and (not Seq^.Step[2])) or (Seq^.Step[1] and (not Seq^.Step[reset_]))
是真實的,但的Seq^.Step[1]
值永遠不會被設置爲true。
真正奇怪的部分是,我有許多程序具有完全相同的行,所有程序似乎都正常工作。
看起來你已經發現了一個編譯器錯誤!或者可能不是。嘗試並做一些調試。向我們證明,Delphi邏輯表達式評估器已被破壞。 –
嘗試將你的表達式分解爲3個變量,並分別評估每個步驟。 –
我不認爲這種表達式編譯器會失敗。也許編譯器可以在搜索路徑中看到另一版本的單元或單元已更改,但編譯器使用舊的DCU,...嘗試在沒有編譯器優化的情況下構建項目,並在CPU調試窗口指令中按指令執行它。通過這種方式,您可以確保編譯器真正編譯該代碼,並且您將看到如何一步一步地完成計算。 –