Simple-Scada 2 > Ошибки

Переменная типа SmallInt принимает недопустимое значение.

(1/1)

dima_k:

--- Код ---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

Timothy Clement:
Локальные переменные нужно обязательно инициализировать перед использованием, там может быть случайное значение.
Просто вначале скрипта написать iii := 0;

dima_k:
move(www,iii,2);

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

Вопрос в том, что переменная iii должна была стать равна "-5536" а стала 60000 - чего не должно быть

Timothy Clement:
Значит компилятор не проверяет целочисленные значения и границы типов, для Object Pascal это вроде допустимо. Также можно записать в глобальную переменную созданную через редактор число превышающее границы типа. Для внешней переменной ОРС явно не даст записать выходящее за границы.

Simple-Scada:
Здравствуйте.

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

Навигация

[0] Главная страница сообщений

Перейти к полной версии
Mobile View