OberonCore https://forum.oberoncore.ru/ |
|
Непрозрачные типы https://forum.oberoncore.ru/viewtopic.php?f=116&t=468 |
Страница 1 из 1 |
Автор: | Сергей Губанов [ Пятница, 18 Май, 2007 13:26 ] |
Заголовок сообщения: | Непрозрачные типы |
Тип Integers.Integer непрозрачный: Integer = POINTER TO IntegerDesc; и тип IntegerDesc не экспортируется. Однако, зная что IntegerDesc представлен массивом, я могу написать: n[0] := 1; (* здесь n: Integers.Integer *) и компилятор со мной соглашается. По моему, это не правильно. |
Автор: | Info21 [ Пятница, 18 Май, 2007 14:09 ] |
Заголовок сообщения: | |
По-моему тоже. Есть, конечно, выход: Integer* = RECORD p: POINTER TO ARRAY ... END; Но тогда от функций придется отказаться. Впрочем, невелика потеря. |
Автор: | Илья Ермаков [ Пятница, 18 Май, 2007 14:59 ] |
Заголовок сообщения: | |
На самом деле уровни экспорта - дело тонкое. На уровне компилятора/рантайма есть четвертый уровень экспорта (кроме трех - скрытый, только чтение, полный) - private. С этим уровнем вроде бы экспортируются описатели любых RECORD (и неявных Desc от POINTER TO RECORD), объявленных в модуле - видимо, с той точки зрения, что поскольку объект этого типа может гулять по системе, то и его дескриптор является как бы не совсем скрытым... |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |