【发布时间】:2016-05-27 15:15:52
【问题描述】:
好的,所以这可能并不那么奇怪,但我对 Ada 真的很陌生。在我的工作中,我正在将遗留的 Ada 翻译成 C,并且遇到了一些我还没有见过的东西。我四处寻找,但真的找不到;在这里。
type Discrete_Names is ( ENUM_POS_4, --label names in an enum
ENUM_POS_5, --that evaluate to 4, 5, and 6
ENUM_POS_6); --respectively
type Discrete_Array_Type is Array (Discrete_Names) of Discrete.Does_Not_Matter
旁注——Discrete.Does_Not_Matter 只是引用了不同库中的另一种类型。
如果有人能帮我弄清楚方向并弄清楚这里发生了什么,那就太好了。
【问题讨论】:
-
枚举类型是数组的索引类型——就这么简单。您可以使用
for i in Discrete_Names loop ... my_array(i) := ...循环遍历数组,并且不能索引数组外的任何内容。哦,是艾达,不是艾达。 -
另外,如果有Enumeration Representation Clauses潜伏在附近,请注明。
-
谢谢,这正是这里发生的事情。附近没有枚举表示子句,或者这个模块中根本没有任何枚举表示子句。
-
Discrete_Names’Pos (ENUM_POS_4)将始终为 0。如果您需要从ENUM_POS_5获取值 5,您可以使用枚举表示子句和 GNAT 的’Enum_Rephere。过去我只使用了一个由枚举索引的整数数组。 -
作为noted,可以使用“
Unchecked_Conversion”的实例来查询用于枚举类型的内部代码。结果应该与'Enum_Rep相同。您可以检查一下您的实现正在使用什么。
标签: ada