Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Переменная типа SmallInt принимает недопустимое значение.  (Прочитано 4244 раз)

dima_k

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Код
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

  • Постоялец
  • ***
  • Сообщений: 149
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Локальные переменные нужно обязательно инициализировать перед использованием, там может быть случайное значение.
Просто вначале скрипта написать iii := 0;

dima_k

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
move(www,iii,2);

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

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

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 149
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Значит компилятор не проверяет целочисленные значения и границы типов, для Object Pascal это вроде допустимо. Также можно записать в глобальную переменную созданную через редактор число превышающее границы типа. Для внешней переменной ОРС явно не даст записать выходящее за границы.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

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