Как получить смещение в байтах для компонента записи?Атрибут позиции для смещения компонента записи
От Ada Programming/Attributes/'Position
«Позиция является атрибутом записи компонента типа. Он представляет смещение адреса компонента с начала записи. Возвращаемое значение представлено в единицах хранения, которые зависят от машины.
Компиляция этот код:
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;
procedure Main is
type R is record
I : Integer;
F : Float;
end record;
begin
Put(R.I'Position); --9
Put(R.F'Position); --10
end;
результаты в:
main.adb:9:08: invalid prefix in selected component "R"
main.adb:10:08: invalid prefix in selected component "R"
Я не знаю, почему я не могу компилировать что?
- Смещение R.I должно быть .
- Смещение для R.F должно быть Integer'Size/Storage_Unit.
Например, см. Документацию на C++ offsetof.
Создает ли переменную с целью получения смещения: выделяет память? – Jossi
В этом случае он зарезервирует место в стеке. – egilhh
Вы можете использовать блок объявления; хранилище должно быть освобождено при выходе из блока. –