- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
Почему компилятор Delphi считает что значение локальной переменной присваивается, когда очевидно, что нет?
USE_BEFORE_DEF W1036
W1036 Variable '%s' might not have been initialized (Delphi)
This warning is given if a variable has not been assigned a value on every code path leading to a point where it is used.
Есть следующий код в пустой форме:
{$WARN USE_BEFORE_DEF ERROR}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
lHandled: Boolean;
begin
// Если использовать только этот блок, то ошибки нет!
if False then
OnMouseWheelUp(Self, [], Point(0,0), lHandled);
// Если использовать только этот блок, то ожидаемо будет ошибка E1036
//if False then
// lHandled := True;
// Ошибка ожидается тут (первое чтение переменной)
if lHandled then
Memo1.Lines.Add('Handled = true') // в зависимости от случая, сработает одна из этих ветвей
else
Memo1.Lines.Add('Handled = false'); // в зависимости от случая, сработает одна из этих ветвей
end;
Очевидно, что lHandled
может не присвоиться никакое значение (т.к. нету ветки else
). Однако, даже не смотря на {$WARN USE_BEFORE_DEF ERROR}
код собирается без предупреждений и без ошибок. Почему же компилятор не видит что переменная не инициализирована, это баг или фича?