Delphi значения логических переменных - PullRequest
1 голос
/ 18 ноября 2011

Почему в Delphi Булева переменная инициализируется в global scope is false, а переменная инициализируется в local scope is true?

Можем ли мы изменить любое из значений по умолчанию, чтобы при инициализации both (global and local variables) имели те же значения?

пример кода

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, 
      Controls, Forms,Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;
      bool1:boolean;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
     bool :boolean;
    begin
     if bool then
       label1.Caption:='true'
     else
       label1.caption:='false';
     if bool1 then
       label2.Caption:='true'
     else
       label2.caption:='false';

    end;

    end.

Это показывает мне результат как

где true is label1 and false is label2

Ответы [ 2 ]

18 голосов
/ 18 ноября 2011

Локальные переменные на самом деле не инициализируются, но глобальные переменные и поля объекта инициализируются равными нулю (что означает «ложь» для логических переменных).

Поэтому вам всегда нужно инициализировать локальные переменные самостоятельно, компилятор даже выдает предупреждение, если вы этого не сделаете.

Вам также следует проверить документацию Delphi по переменным.

2 голосов
/ 18 ноября 2011

Глобальные переменные всегда инициализируются нулем - в логическом значении, что означает false. Локальные переменные в процедурах и методах вообще не инициализируются. Вам нужно присвоить им значение самостоятельно.

...