Artyemov писал(а):
Цитата:
TYPE
Bytes = RECORD [256]
END;
Квадратные скобки и их содержимое как расценивать? В данном случае утилита showdef показывает это число как сырое значение системного флага записи. Это внутренний код, который может обозначать, например, безтеговую запись. Иногда транслятор разрешает использовать в качестве системного флага и идентификатор этого флага, и число, обозначающее его внутренний код.
Максимальное значение числа, ровно как и то, какие числа транслятор пропустит, это уже зависит от реализации. BlackBox тоже разрешает запись
Код:
RECORD [1]
как аналог
Код:
RECORD [untagged]
Смотрим в коде BrowserCmd как устроен этот вывод:
Код:
PROCEDURE SysFlag;
BEGIN
IF typ^.sysflag # 0 THEN
Wch("["); Wi(typ^.sysflag); Ws("] ")
END
END SysFlag;
BEGIN
CASE typ^.form OF
...
| Record:
Ws("RECORD "); SysFlag;
IF typ^.BaseTyp # NIL THEN Wch("("); Wtype(typ^.BaseTyp); Wch(")") END ;
Ofront хранит в системном флаге типа "запись" не только внутренний код флага (биты {0..7}), но и системное выравнивание записи (биты {8..14}). Это внутренняя информация транслятора, нужная для правильного расчёта выравнивания полей при расширении записи.