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