Ada 编程/表示子句
外观
< Ada 编程
有几种形式可以指定项目的表示。
type
Day_Of_Monthis
range
1 .. 31;for
Day_Of_Month'Sizeuse
8; -- 8 bitsfor
Day_Of_Month'Alignmentuse
1; -- 1 byte
记录表示子句指定记录的布局 方面。对于任何组件,可以给出组件子句,指定其在记录对象中的位置,通过其相对于地址(称为位置)的存储单元偏移量以及在该位置占用的位(称为First_Bit 和Last_Bit)
Component_Nameat
Positionrange
First_Bit .. Last_Bit;
这三个表达式必须是静态的,非负的,并且是任何整数类型;它们具有相应的 属性 'Position、'First_Bit 和 'Last_Bit。请注意,位范围可能远远超出存储单元边界。没有组件子句的组件将位于编译器选择的任何位置。
示例
type
Device_Registeris
record
Ready : Status_Flag; Error : Error_Flag; Data : Unsigned_16;end
record
;for
Device_Registeruse
record
Readyat
0range
0 .. 0; Errorat
0range
1 .. 1; -- Reserved bits Dataat
0range
16 .. 31;end
record
;
或者,具有相同的结果
for
Device_Registeruse
record
Readyat
0range
0 .. 0; Errorat
0range
1 .. 1; -- Reserved bits Dataat
1range
0 .. 15;end
record
;
布局当然取决于机器架构是小端还是大端。相应的 属性 称为 'Bit_Order。
对于本机位顺序中的 Data 组件,'Position、'First_Bit 和 'Last_Bit 在两种情况下都将返回 1、0 和 15。
对于某些组件,可以采用所谓的有偏表示。对于类型 T,属性 'Size 将返回 10,但由于它只有 8 个值,因此 3 位就足够了。可以使用以下规范强制执行此操作
type
Tis
range
1000 .. 1007;
type
Recis
record
A: Integerrange
0 .. 1; B: Boolean; C: T;end
record
;
for
Recuse
record
Bat
0range
0 .. 1; Cat
0range
4 .. 6; -- biased representationend
record
;
请注意,类型 T 不需要大小子句。因此,当记录组件和类型 T 的独立对象相互赋值时,会以两种方式执行表示更改。
另请注意,对于组件 A
,编译器可以自由选择位置 0 的任何剩余位,但也可以在位置 1 使用与给定实现中整数所需的位数一样多的位。
枚举表示子句使用命名聚合指定枚举类型的编码 方面。
type
Status_Flagis
(Ready, Wait);for
Status_Flaguse
(Ready => 0, Wait => 1); -- confirming clause
另一种表示
for
Status_Flaguse
(Ready => 0, Wait => 2#100#);
文字的表达式必须是静态的,并且是任何整数类型。这些值不得与顺序冲突。
对于数组和记录,可以使用 方面 包。它指定,对于每个组件,将使用与应用于其子类型的属性 'Size 返回的位数一样多的位。