Storage_Offset - это специальный целочисленный тип в пакете System.Storage_Elements
, который можно добавлять к объектам типа System.Address
. То, что именно являются единицами Address
и Storage_Offset
, определяется реализацией, но, вероятно, почти каждая существующая реализация использует байты. Таким образом, Next_Address + Storage_Offset'(4)
означает «адрес, который проходит через четыре байта независимо от того, на что ссылается Next_Address».
Вы немного говорили о переносе Ады. В 99% случаев это очень глупая идея (% 1 - это когда вам нужно портировать на платформу без компилятора Ada). Я бы сказал то же самое, независимо от того, на каком языке вы портируете. Это дурацкая игра. лучший результат, на который вы можете надеяться при переносе кода, заключается в том, что после огромных усилий он работает так же, как и раньше. С кодированием лучшего случая никогда не бывает.
Ada может нормально взаимодействовать с C, так что было бы намного разумнее хранить неизменный код в Ada и только "порт" вещи, которые вам нужно изменить.
Если вы столкнетесь с каким-либо кодом задач, защищенными типами или пользовательскими потоками, вы окажетесь в мире боли. Эти вещи не имеют простых аналогов С.
Если у ваших боссов действительно есть стояк для C или чего-то еще, я бы посоветовал изучить AdaMagic Sofcheck , который предоставляет сервис для преобразования кода Ada в ANSI C. Назад в тот день (два владельца ранее ) они привыкли утверждать, что он производит поддерживаемый код C. В любом случае, это, вероятно, будет намного дешевле, чем если бы неопытный (на Аде) разработчик попытался сделать все вручную.