跳轉到內容

Ada 程式設計/屬性/'Size

來自 Wikibooks,開放的書籍,為開放的世界

Ada. Time-tested, safe and secure.
Ada。經久耐用,安全可靠。

R'Size 是一個 表示屬性,用於獲取物件或型別的位數。

  • 當應用於物件時,'Size 返回分配給儲存物件的實際位數。
  • 當應用於子型別時,'Size 返回最小的 n,使得所有值都適合範圍 0 .. 2n-1(僅對於正值),否則為 -2n-1 .. 2n-1-1。

'Size 屬性也可以在屬性定義子句中使用,以設定第一個子型別的尺寸。在特殊情況下,甚至可以透過使用小於上述 n 的值來強制使用有偏差的表示。

此子型別允許使用僅有三位數的有偏差表示,因為它只包含八個值。

 type T is range 1000 .. 1007;
 for  T'Size use 3;

如果沒有大小子句,T'Size 將返回 10,因為 210-1 = 1023。

檔案:attributes_size.adb (檢視純文字下載頁面瀏覽所有)
with Ada.Text_IO;

procedure Attributes_Size is

   package T_IO renames Ada.Text_IO;
   package I_IO is new  Ada.Text_IO.Integer_IO (Integer);

   A_Boolean : constant Boolean := True;
begin
   T_IO.Put ("Size of Boolean type   = "); -- An enumeration with
   I_IO.Put (Boolean'Size);                -- 2 values fits into
   T_IO.New_Line;                          -- 1 bit.

   T_IO.Put ("Size of Boolean Object = "); -- it is more efficient
   I_IO.Put (A_Boolean'Size);              -- to store a boolean
   T_IO.New_Line;                          -- as an entire byte
end Attributes_Size;

使用 GNAT 10.2.0 的輸出將是

Size of Boolean type   =           1
Size of Boolean Object =           8

自己嘗試一下,看看你的編譯器是如何做的。

Size 的值也可以使用屬性定義子句指定。例如,以下宣告指定了與 C99 相容的 bool

type Bool is new Boolean; 
for Bool'Size use Interfaces.C.int'Size;

錯誤用法

[編輯 | 編輯原始碼]

一個常見的 Ada 程式設計錯誤是假設為型別 T 指定 'Size 會強制編譯器為這種型別的物件分配正好這個數量的位。這不是真的。指定的 T'Size 將強制編譯器在打包陣列和記錄的元件中以及在 Unchecked_Conversion 中使用此大小,但編譯器仍然可以自由地為獨立物件分配更多位。

在物件本身使用 'Size 來強制物件使用指定的值。

另請參閱

[編輯 | 編輯原始碼]

Ada 83 參考手冊

[編輯 | 編輯原始碼]

Ada 95 參考手冊

[編輯 | 編輯原始碼]

Ada 2005 參考手冊

[編輯 | 編輯原始碼]

Ada 2012 參考手冊

[編輯 | 編輯原始碼]
華夏公益教科書