OberonCore
https://forum.oberoncore.ru/

Си-unions в КП
https://forum.oberoncore.ru/viewtopic.php?f=2&t=3052
Страница 1 из 1

Автор:  Илья Ермаков [ Вторник, 07 Декабрь, 2010 17:31 ]
Заголовок сообщения:  Си-unions в КП

Выделено: viewtopic.php?p=55205#p55205

В КП можно IMPORT SYSTEM и RECORD [union].

Автор:  Alexey Veselovsky [ Вторник, 07 Декабрь, 2010 17:33 ]
Заголовок сообщения:  Re: Oberon & bitfields & unions

Илья Ермаков писал(а):
В КП можно IMPORT SYSTEM и RECORD [union].

Но с битовыми полями придётся всё равно бороться в ручную?
Да, и в каком виде оно импортирует union?

Автор:  Илья Ермаков [ Вторник, 07 Декабрь, 2010 17:34 ]
Заголовок сообщения:  Re: Oberon & bitfields & unions

Когда в импорте указан SYSTEM, то Вы можете объявлять типы RECORD [union].

Разумеется, как и [untagged], их нельзя выделить через КП-шный NEW, только у ОС.

Автор:  Alexey Veselovsky [ Вторник, 07 Декабрь, 2010 17:47 ]
Заголовок сообщения:  Re: Oberon & bitfields & unions

Илья Ермаков писал(а):
Когда в импорте указан SYSTEM, то Вы можете объявлять типы RECORD [union].

Разумеется, как и [untagged], их нельзя выделить через КП-шный NEW, только у ОС.

А можно подробней с примером как это будет выглядеть, и что с этим RECORD [union] можно делать? А то BB под рукой нет. (да, я правильно понимаю, что RECORD [untagged] это такой RECORD к которому не применим оператор WITH ?)

Автор:  Илья Ермаков [ Вторник, 07 Декабрь, 2010 18:21 ]
Заголовок сообщения:  Re: Oberon & bitfields & unions

Да.

[untagged] и [union] в точности соотвествуют структурам и union-ам Си.

Т.е. чисто распил памяти с обращением по имени поля.

Для взаимодействия из КП с внешними библиотеками.

Код:
TYPE
  MyType = RECORD [union]
    var1: RECORD [untagged]
       a, b: INTEGER
    END;
    var2: LONGINT
  END;


Компилируемость не проверял, может, тип var1 отдельно объявить, но, скорее всего, должно сработать.

Автор:  Alexey Veselovsky [ Вторник, 07 Декабрь, 2010 19:28 ]
Заголовок сообщения:  Re: Oberon & bitfields & unions

Спасибо. Интересное и полезное расширение.

Автор:  Geniepro [ Вторник, 07 Декабрь, 2010 20:34 ]
Заголовок сообщения:  Re: Си-unions в КП

Вирт же, когда убирал объединения, имел в виду, что их заменит наследование.

Автор:  Alexey Veselovsky [ Вторник, 07 Декабрь, 2010 21:36 ]
Заголовок сообщения:  Re: Си-unions в КП

Geniepro писал(а):
Вирт же, когда убирал объединения, имел в виду, что их заменит наследование.

Наследование менее универсально в плане низкоуровневой работы с данными. Не позволяет одни и те же данные трактовать так и эдак. См. пример в параллельной теме от Галкова.

Ну, а кроме того, внешний мир не в курсе про наследование, ибо внешний мир это Си. И с этим нужно считаться.

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