ada中的地址表示
我在下面贴了一段代码,是用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 --'
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;
也许你是想打电话给我的下一个地址
在这种情况下,表达式将返回4Storage\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;
也许你是想打电话给我的下一个地址
在这种情况下,表达式将返回4Storage\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即可