OberonCore
https://forum.oberoncore.ru/

Особенности целых типов
https://forum.oberoncore.ru/viewtopic.php?f=29&t=1111
Страница 1 из 1

Автор:  Иван Горячев [ Понедельник, 04 Август, 2008 03:59 ]
Заголовок сообщения:  Особенности целых типов

Переводил тут модуля из Бутылки на ББ. На законное действие s := s * (-1) ББ упорно выдаёт ошибку. Начал проверять:
Код:
MODULE PrivNeg;

PROCEDURE Do*;
VAR s : SHORTINT; i : INTEGER;
BEGIN
   i := 0 - i;
   s := 0 - s [x]<--Incompatible assigment
END Do;

END PrivNeg.

Вопрос: насколько законна ошибка? И если законна, то почему только для SHORTINT, а для INTEGER ошибки нет?

Автор:  Александр Ильин [ Понедельник, 04 Август, 2008 06:45 ]
Заголовок сообщения:  Re: Особенности целых типов

Я так понимаю, что поскольку унарного отрицания нет, а вычисления производятся на уровне INTEGER, то для присвоения необходимо использовать SHORT(). В ББ компилятор построже в этом плане, чем другие (XDS, Oberon, AOS).

Автор:  Евгений Темиргалеев [ Понедельник, 04 Август, 2008 08:39 ]
Заголовок сообщения:  Re: Особенности целых типов

Ошибка вполне законна:
Language Report писал(а):
operator | first operand | second operand | result type
+ - * DIV MOD | <= INTEGER | <= INTEGER | INTEGER

Автор:  Пётр Кушнир [ Понедельник, 04 Август, 2008 09:07 ]
Заголовок сообщения:  Re: Особенности целых типов

В "бутылке" ещё любят понаставить везде LONGINT, с которыми в ББ большинство встроенных функций не работает. Приходится заменять на INTEGER по всему тексту модуля.

Автор:  Иван Горячев [ Понедельник, 04 Август, 2008 09:19 ]
Заголовок сообщения:  Re: Особенности целых типов

Пётр Кушнир писал(а):
В "бутылке" ещё любят понаставить везде LONGINT, с которыми в ББ большинство встроенных функций не работает. Приходится заменять на INTEGER по всему тексту модуля.


Ну так у них LONGINT 32 бита, что поделать. Автозамена вполне справляется

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/