簡體   English   中英

Ada-是否有定義的行為會超出范圍的末端?

[英]Ada - Any defined behavior for incrementing past end of range?

如果我在ADA中定義的范圍是從1 ... 1000,那么如果我增加到1000以上,ADA規范是否定義了行為?

例如:

type Index is range 1..1000;

idx : Index := 1;

procedure Increment is 
begin
  idx := idx + 1;
end

當我用idx = 1000調用Increment時,會發生什么?

  • 環繞(idx = 1)
  • 超出范圍異常
  • 未定義的行為
  • 還有嗎

您的程序將失敗,並顯示CONSTRAINT_ERROR 但是,這不是因為您最終嘗試將idx設置為1001。它的初始值0也不在您的預定義范圍內。 幸運的是,編譯器已經在編譯時警告您這一事實。

如果您已將idx設置為允許的值,然后以編譯器無法靜態檢測的方式將其增加到其上限之外,則將再次引發CONSTRAINT_ERROR (但在編譯時不會有任何提示)。 從技術上講,此錯誤是一個異常 ,您可以像使用該語言的任何其他異常一樣來處理。

注意:我有意鏈接到上面的古老Ada '83規范,以表明自行為開始以來,這種行為已成為該語言的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM