ada中的地址表示

ada中的地址表示,ada,memory-address,Ada,Memory Address,我在下面贴了一段代码,是用Ada语言写的。我需要一些关于一些实现的说明 C : character; Char : character; type Myarr_Type is array (character range 'A'..'K') of character; Myarr : Myarr_Type := ('A','B','C','D','E','F','G','H','I','J','K'); Next_Address := Myarr'address --'

我在下面贴了一段代码,是用Ada语言写的。我需要一些关于一些实现的说明

  C  : character;

  Char : character;
  type Myarr_Type is array (character range 'A'..'K') of character;
  Myarr : Myarr_Type := ('A','B','C','D','E','F','G','H','I','J','K');

  Next_Address := Myarr'address --'
  Last_Address := Next_Address + Storage_Offset'(40); --'

   return P2 + Storage_Offset'(4); --'

  Last_Address := Next_Address + Storage_Offset'(4); --'
现在我的疑问是1)P2+Storage_Offset'(4)实际上是什么意思。这是否意味着它返回数组中下一个元素的地址,即“B”。Ada中的Storage_Offset'(4)是指4位还是4字节的内存。2) 如果我假设Last_Address指向数组的最后一个元素,即“K”,那么算术存储_Offset”(40)如何满足实际实现

如果你需要更多的澄清,请联系我

请假定该函数不存在。 事实上,我有一些ada文件,我的工作是将它们转换成C文件。因为我是ada的初学者,所以我在这方面遇到了很多问题。如果有任何混淆,请原谅

谢谢 Maddy

是包
系统中的一种特殊整数类型。存储元素可以添加到
系统.地址类型的对象中。实现定义了
地址
存储偏移量
的确切单位,但可能存在的每个实现都使用字节。所以
Next\u Address+Storage\u Offset'(4)
表示“超过Next\u地址所指的四个字节的地址”

你谈到了Ada porting。在99%的情况下,这是一个非常愚蠢的想法(当您需要移植到一个没有Ada编译器的平台时,%1)。无论你移植什么语言,我都会说同样的话。这是愚蠢的游戏。移植代码时,您所能期望的最佳结果是,经过大量的努力,它的工作效果与以前一样好。有了编码,最好的情况永远不会发生

Ada可以很好地与C接口,所以在Ada中保持代码不变,只保留需要更改的“端口”内容,这将是非常明智的

如果您遇到任何任务代码、受保护类型或自定义流,您将受到伤害。这些东西并没有简单的C类比

如果你的老板真的对C或者其他东西有兴趣,我建议你研究一下,它提供了一种将Ada代码转换成ANSIC的服务。早在那天(之前的两位老板),他们就声称它产生了可维护的C代码。无论哪种方式,它都可能比让一个没有经验的(Ada)开发人员手工完成这一切要便宜得多。

是包
系统中的一种特殊的整数类型。存储元素可以添加到
系统.地址类型的对象中。实现定义了
地址
存储偏移量
的确切单位,但可能存在的每个实现都使用字节。所以
Next\u Address+Storage\u Offset'(4)
表示“超过Next\u地址所指的四个字节的地址”

my_func(int P1,int P2)
{
  return P2 + Storage_Offset'(4);
}
你谈到了Ada porting。在99%的情况下,这是一个非常愚蠢的想法(当您需要移植到一个没有Ada编译器的平台时,%1)。无论你移植什么语言,我都会说同样的话。这是愚蠢的游戏。移植代码时,您所能期望的最佳结果是,经过大量的努力,它的工作效果与以前一样好。有了编码,最好的情况永远不会发生

Ada可以很好地与C接口,所以在Ada中保持代码不变,只保留需要更改的“端口”内容,这将是非常明智的

如果您遇到任何任务代码、受保护类型或自定义流,您将受到伤害。这些东西并没有简单的C类比

如果你的老板真的对C或者其他东西有兴趣,我建议你研究一下,它提供了一种将Ada代码转换成ANSIC的服务。早在那天(之前的两位老板),他们就声称它产生了可维护的C代码。无论哪种方式,它都可能比让一个没有经验的(Ada)开发人员手工完成这一切要便宜得多

my_func(int P1,int P2)
{
  return P2 + Storage_Offset'(4);
}
这是一个C函数,它的主体是用Ada编写的。没有接受整数和存储偏移量的“+”运算符;也许你在找

function "+"(Left : Address; Right : Storage_Offset)
 return Address;
也许你是想打电话给我的下一个地址

在这种情况下,表达式将返回4
Storage\u元素的地址,即
Myarr('A')
之后的字节

Myarr\u Type
是一个
字符数组
,在任何通用体系结构上的任何普通编译器中,它都将是一个标准的8位字节。因此,
Myarr\u Type
对象的长度将是11字节,而不是44字节,
Myarr('A')地址+4
将是
Myarr('E')
的地址

如果需要
Myarr
的最后一个元素的地址,请重试

Myarr (Myarr'Last)'Address
这是一个C函数,它的主体是用Ada编写的。没有接受整数和存储偏移量的“+”运算符;也许你在找

function "+"(Left : Address; Right : Storage_Offset)
 return Address;
也许你是想打电话给我的下一个地址

在这种情况下,表达式将返回4
Storage\u元素的地址,即
Myarr('A')
之后的字节

Myarr\u Type
是一个
字符数组
,在任何通用体系结构上的任何普通编译器中,它都将是一个标准的8位字节。因此,
Myarr\u Type
对象的长度将是11字节,而不是44字节,
Myarr('A')地址+4
将是
Myarr('E')
的地址

如果需要
Myarr
的最后一个元素的地址,请重试

Myarr (Myarr'Last)'Address

请看一看你的问题,想想别人是怎么理解的。也请接受更多的答案。请告诉我问题的哪一部分不清楚?最好不要只是把这个问题贴上不清楚的标签。无论你从哪里得到这个答案,都不是“用Ada语言”。它显示了从Fortran或C或其他语言中逐字翻译过来的所有迹象。即使是能力稍差的Ada程序员也不会编写这样的代码。我或这里的其他人只需将代码读回给您和sa即可