![](/img/trans.png)
[英]Why does an Ada compiler let range violations pass? Why is my type declaration a runtime entity?
[英]Ada Type Declaration Semantics
我正在上大學的Ada。 今天,我的教授向我們提出了一個問題。 在下面的代碼中,有三個類型聲明。 第三個沒有編譯錯誤“缺少新內容”。
我假設關鍵字'Type'讓編譯器知道我們即將定義存儲類,所以我的問題是:
聲明之間的語義差異是什么?
如果省略關鍵字Integer,則在指定范圍時Ada會采用通用整數類型嗎? 這似乎是顯而易見的合乎邏輯的結果。 此外,如果關鍵字“整數”在“范圍”之前是新的,那么是否需要?
我希望這不是模棱兩可的,我進行了一些研究,但似乎找不到確切的答案,或者也許我想和Ada接觸很多新手,以了解我的發現。 我真的很想了解下面發生了什么。
with Ada.Text_IO; use ada.Text_IO;
procedure any is
type abc is new Integer range 1..10;
num : abc;
type def is range 1..10;
num2 : def;
type xyz is Integer range 1..10;
num3 : xyz;
begin
num := 5;
num2 := 6;
num3 := 7;
end any;
在第一個聲明中,您要聲明一個不同於Integer
的新類型,但是要從中繼承一些屬性(例如,原始函數和運算符並不重要)。
對於每個實際問題,在這種情況下,類型abc
和def
在語義上都是等效的。 但是,如果您對基本類型進行了基本操作,則將有所不同。
在這種情況下,您不能真正考慮范圍的邊界是否具有類型,但是,如果存在基類型,則它們必須滿足位於基類型范圍內的約束。
現在xyz
是不正確的,並且Integer在這里並不意味着任何東西。 這可能意味着兩件事:
此外,如果關鍵字“整數”在“范圍”之前是新的,那么是否需要?
Integer
不是關鍵字,它是標准包中定義的類型。 在此聲明中
type A is Integer range 1 .. 10;
Integer
是對Ada不期望的類型的引用。 它期望一個類型定義,一個基本類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.