检查未分配的布尔局部变量总是返回True?

Fab*_*zio -1 delphi variables

在我的测试期间,以下情况始终会返回 True

var
  Tmp : Boolean;
begin
  if(Tmp)
  then ShowMessage('True')
  else ShowMessage('False');
end;
Run Code Online (Sandbox Code Playgroud)

编译时,我收到以下警告消息:

[DCC警告] Unit1.pas(30):W1036变量“ Tmp”可能尚未初始化

检查未分配的局部Boolean变量是否总是返回True还是纯属偶然?

Mar*_*ynA 5

在我的测试应用中

if (Tmp) then
Run Code Online (Sandbox Code Playgroud)

编译为

cmp byte ptr[ebp-$05],0
jz +$0c
Run Code Online (Sandbox Code Playgroud)

因此,这是对栈中Tmp变量的内容是否为零的简单测试。

在测试堆栈位置上的值由堆栈的先前使用确定,因此从统计角度来看,很有可能不是零而不是零。因此,您的观察。