Simple-Scada forum

Simple-Scada 2 => Ошибки => Тема начата: dima_k от 03 Августа 2021, 08:51:58

Название: Переменная типа SmallInt принимает недопустимое значение.
Отправлено: dima_k от 03 Августа 2021, 08:51:58
Код
var iii : SmallInt;
    www : word;
begin
  www:=60000;
  move(www,iii,2);
  TextWWW.Text:=IntToStr(www)+#13#10+IntToStr(iii);
end.

в данном коде в переменной iii по идее должно быть "-5536" а получается 60000.
Чего в принципе быть не может т.к. у SmallInt диапазон значений -32768…32767
Название: Re: Переменная типа SmallInt принимает недопустимое значение.
Отправлено: Timothy Clement от 03 Августа 2021, 10:21:24
Локальные переменные нужно обязательно инициализировать перед использованием, там может быть случайное значение.
Просто вначале скрипта написать iii := 0;
Название: Re: Переменная типа SmallInt принимает недопустимое значение.
Отправлено: dima_k от 03 Августа 2021, 15:55:07
move(www,iii,2);

это ли не инициализация.
Я в переменную www записал значение.
И при помощи move записал его в iii.

Вопрос в том, что переменная iii должна была стать равна "-5536" а стала 60000 - чего не должно быть
Название: Re: Переменная типа SmallInt принимает недопустимое значение.
Отправлено: Timothy Clement от 03 Августа 2021, 16:31:26
Значит компилятор не проверяет целочисленные значения и границы типов, для Object Pascal это вроде допустимо. Также можно записать в глобальную переменную созданную через редактор число превышающее границы типа. Для внешней переменной ОРС явно не даст записать выходящее за границы.
Название: Re: Переменная типа SmallInt принимает недопустимое значение.
Отправлено: Simple-Scada от 04 Августа 2021, 11:50:13
Здравствуйте.

Да, текущая версия компилятора берёт локальные переменные типов ShortInt и SmallInt как беззнаковые того же размера. Попробуем устранить в одном из будущих обновлений.