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 返回的位數一樣多的位。
