跳轉至內容

Ada 程式設計/關鍵字/aliased

來自華夏公益教科書,自由的教學資源

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

如果你來自 C/C++,你可能習慣了這樣一個事實,即 陣列、結構體/記錄 和其他變數的每個元素都具有一個地址。 C/C++ 標準實際上要求這樣做。在 Ada 中,情況並非如此。

Ada 是一種自最佳化語言——例如,它沒有像 C/C++ 中那樣的 register 關鍵字。Ada 編譯器將自動使用暫存器進行儲存。順便說一句,大多數現代 C/C++ 編譯器現在只是忽略了 register 並自行分配暫存器,就像 Ada 一樣。

因此,如果您想從任何變數獲取 訪問,您需要告訴編譯器該變數需要在記憶體中,並且可能不會駐留在暫存器中。這就是 關鍵字 aliased 的作用。此外,它還可以作為程式閱讀者關於存在引用該變數的指標的提示。

對於變數

[編輯 | 編輯原始碼]
I : aliased Integer := 0;

對於型別宣告

[編輯 | 編輯原始碼]

對於陣列的元素

[編輯 | 編輯原始碼]

宣告一個array 作為aliased 將僅確保該陣列作為一個整體具有地址。它沒有說明該array 的各個元素——這些元素可能以一種多個元素具有相同地址的方式打包。您需要將實際元素也宣告為 aliased。您可以在 Types/array 中瞭解如何做到這一點。這裡只是一個簡短的示例

 type Day_Of_Month is range 1 .. 31;
 type Day_Has_Appointment is array (Day_Of_Month) of aliased Boolean;

對於記錄的元素

[編輯 | 編輯原始碼]

與陣列一樣,將記錄宣告為 aliased 僅能確保該記錄作為一個整體具有地址。它沒有說明該記錄的各個元素——這些元素同樣可能被打包並共享地址。您同樣需要將實際元素也宣告為 aliased。您可以在 Types/record 中瞭解如何做到這一點。這裡只是一個簡短的示例

type Basic_Record is
   record
      A : aliased Integer;
   end record;

華夏公益教科書

[編輯 | 編輯原始碼]

Ada 參考手冊

[編輯 | 編輯原始碼]

Ada 質量和風格指南

[編輯 | 編輯原始碼]


Ada 關鍵字
abort else new return
abs elsif not reverse
abstract (Ada 95) end null
accept entry select
access exception of separate
aliased (Ada 95) exit or some (Ada 2012)
all others subtype
and for out synchronized (Ada 2005)
array function overriding (Ada 2005)
at tagged (Ada 95)
generic package task
begin goto parallel (Ada 2022) terminate
body pragma then
if private type
case in procedure
constant interface (Ada 2005) protected (Ada 95) until (Ada 95)
is use
declare raise
delay limited range when
delta loop record while
digits rem with
do mod renames
requeue (Ada 95) xor
華夏公益教科書