版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ADA語言基礎(chǔ)教程(美國軍方的專用計(jì)算機(jī)
語言?。?/p>
發(fā)表于:個(gè)人日記,科技資訊,編程開發(fā)?作者:謀萬世全局者
標(biāo)簽:ADA,軍方,基礎(chǔ)教程,美國,計(jì)算機(jī)語言,語言
PS:前天晚上應(yīng)朋友之邀,過去喝茶聊天。其中有一位美籍臺(tái)灣人。原來他還是
IT界的老前輩,家住硅谷。2。多年前就在一家跨國大公司從事數(shù)據(jù)庫管理,我們
聊了很多。他說他以前做工程師時(shí)用的是Ada語言,我以前真沒怎么聽說過還有
這種語言,回來查了一下,Ada語言原來是美國軍方的專用計(jì)算機(jī)語言!據(jù)說中
國軍方目前也在使用!Ada是一種表現(xiàn)能力很強(qiáng)的通用程序設(shè)計(jì)語言,它是美國
國防部為克服軟件開發(fā)危機(jī),耗費(fèi)巨資,歷時(shí)近20年研制成功的。它被譽(yù)為第四
代計(jì)算機(jī)語言的成功代表。目前應(yīng)用廣泛度排16名。
a
Ada語言的中文資料極度缺乏,當(dāng)當(dāng)網(wǎng)里居然一本都沒有。找到了一本80年底
翻譯的ada語言基礎(chǔ)。下面這篇ADA語言文檔還不錯(cuò),有興趣的同學(xué)可以了解
一下,看了一下語法,跟C語言很像,應(yīng)該屬于C的高級(jí)改進(jìn)版。
第1章Ada簡介
1.1概述(Overview)
Ada語言最初設(shè)計(jì)是為了構(gòu)建長周期的、高度可靠的軟件系統(tǒng)。它提供了一系列功
能來定義相關(guān)的數(shù)據(jù)類型(type)、對(duì)象(object)和操作(operation)的程序包
(package)o程序包可以被參數(shù)化,數(shù)據(jù)類型可以被擴(kuò)展以支持可重用庫的構(gòu)建。
操作既可以使用方便的順序控制結(jié)構(gòu),通過子程序(subprogram)來實(shí)現(xiàn),也可以
通過包含并發(fā)線程同步控制的入口(entry)來實(shí)現(xiàn)。Ada也支持單獨(dú)編譯(separate
compilation),在物理層上支持模塊性。
Ada包含了很復(fù)雜的功能以支持實(shí)時(shí)(real-time),并發(fā)程序設(shè)計(jì)(concurrent
programming)?錯(cuò)誤可以作為異常(exception)來標(biāo)示,并可以被明確地處理。
Ada也覆蓋了系統(tǒng)編程(systemprogramming);這需要對(duì)數(shù)據(jù)表示和系統(tǒng)特性訪
問的精確控制。最后,提供了預(yù)定義的標(biāo)準(zhǔn)程序包,包括輸入輸出、字符串處理、
數(shù)值計(jì)算的基本函數(shù)和隨機(jī)數(shù)生成。
譯自《AdaReferenceManual》Sectioni:General
在本章里,我們將會(huì)初步介紹一下Ada,以給讀者留下大致的印象。
1.2Ada的歷史(TheHistoryofAda)
為了更好的理解Ada,它的歷史有必要簡要地了解一下。
1974年時(shí):美國國防部(DoD)意識(shí)到開發(fā)和維護(hù)嵌入式系統(tǒng)(固化在硬件中的系
統(tǒng),如導(dǎo)彈彈導(dǎo)系統(tǒng))耗費(fèi)了過多的時(shí)間,精力和資金。
當(dāng)時(shí).,在使用的計(jì)算機(jī)語言有45。多種,這增加了開發(fā)新系統(tǒng)以及培訓(xùn)程序員使
熟悉現(xiàn)有系統(tǒng)的時(shí)間和成本。維護(hù)工作也由于沒有標(biāo)準(zhǔn)化的工具(編輯器,編譯器
等)而受阻。所有這些因素使DoD意識(shí)到它需要-們強(qiáng)大的語言,能被所有嵌入
式電腦供應(yīng)商使用。
開發(fā)工作始于1975年,當(dāng)時(shí)DoD列舉了一系列的語言需求;但沒有一門現(xiàn)有語言
指定了這些特性,因此在1977年,DoD起草了一份建議,開發(fā)一門新的語言。不
像COBOL這些語言由專門的委員會(huì)制定,新語言是一場(chǎng)競爭的主題,在產(chǎn)業(yè)界和
學(xué)術(shù)界的評(píng)估中產(chǎn)生。
在眾多競爭者當(dāng)中,有4家被選中以完成進(jìn)一步的工作。最終只剩下Cii-
HoneywellBull公司。這門語言被命名為Ada。設(shè)計(jì)小組由JeanIchbiah領(lǐng)導(dǎo),
對(duì)語言全權(quán)負(fù)責(zé)。
在1983,Ada成為了一個(gè)ANSI標(biāo)準(zhǔn)ANSI/MIL-STD-1815A。此年成為一個(gè)ISO
標(biāo)準(zhǔn)。在參考手冊(cè)中定義的語言通常稱為LRM或ARM(AdaReferenceManual)?
在Ada的相關(guān)書籍和編譯器的報(bào)錯(cuò)信息中經(jīng)常出現(xiàn)手冊(cè)內(nèi)容的引用。對(duì)于任何
Ada站點(diǎn),參考手冊(cè)都是推薦的;雖然很難閱讀,但它是所有Ada問題的最權(quán)威
解釋(一個(gè)小組正在澄清語言定義中已發(fā)現(xiàn)的語義不清的內(nèi)容)。
Ada也經(jīng)過了一次修正,即1995的新的ISO標(biāo)準(zhǔn)。新標(biāo)準(zhǔn)修正了Ada83的很多
缺陷,并進(jìn)一步擴(kuò)展了它的功能(在修正工作中,有個(gè)臨時(shí)的標(biāo)準(zhǔn),即Adagx,不
少Ada文章是在這段時(shí)間寫的,因此有些內(nèi)容在細(xì)節(jié)上可能與Ada95有所區(qū)別,
但主要原理差不多)。
為了防止Ada編譯器的不兼容版本的擴(kuò)散,AdaJointProgramOffice(控制Ada
語言的執(zhí)行部門,于1998年10月1日關(guān)閉,見AdaJointProgramOffice
closed)采取了不尋常的做法-他們注冊(cè)Ada商標(biāo)。除非通過他們的兼容性測(cè)
試,編譯器廠商不允許出售‘Ada'編譯器。這在不久以后放松了,保護(hù)協(xié)議變成了
'ValidatedAda'。因而產(chǎn)生的Ada確認(rèn)證書被限制在一定的時(shí)間內(nèi)并有一個(gè)期滿
時(shí)間。當(dāng)時(shí)間過期后,該編譯器不能再被標(biāo)記為'ValidatedAda'編譯器。通過這
種方式,AJPO確保當(dāng)前市場(chǎng)上的編譯器與當(dāng)前標(biāo)準(zhǔn)相一致。
目標(biāo)是使所有的Ada程序能在所有系統(tǒng)上被編譯-在這點(diǎn)上,AJPO比其它語言小
組做得好。
上一述內(nèi)容基本上是從QuickAda翻譯過來的(以前翻譯該教材“半途而廢”的殘留
品,直接引用一下了),Ada語言的詳細(xì)歷史細(xì)節(jié)見TheHistoryofAda
1.3與C和C++的比較(Contrast:AdaandC,C++)
由于Ada出生年月遲了一點(diǎn),而且目前的操作系統(tǒng)基本上由C,C++寫成,導(dǎo)致
Ada在"平民層”的推廣比較糟糕,至今還不是很流行,WhyAdaisn'tPopular-
對(duì)此有比較詳細(xì)的解釋。而Ada愛好者們?yōu)榱孙@示Ada的優(yōu)越性(這種心情相當(dāng)
能理解),將Ada與C,C++做了一系列比較,其結(jié)果反正綜和指數(shù)都是Ada
高,這方面文章有不少,ComparingDevelopmentCostsofCandAda,
Contrasts:Ada95&C++。在這里,我們只初略地了解一下Ada的優(yōu)勢(shì)即可,在
讀者朋友接下去的學(xué)習(xí)中,應(yīng)該是能從心里感受到Ada的優(yōu)點(diǎn)。
1.更高的安全性、可靠性。Ada中對(duì)于訪問內(nèi)存、數(shù)值計(jì)算等很多方面有一
些嚴(yán)格的規(guī)定,而沒有C和C++那么自由;程序的錯(cuò)誤絕大部份能在編譯和
運(yùn)行時(shí)檢測(cè)到,以至于可以不需要編譯器,另外,語言也包含異常特性,能方
便地處理錯(cuò)誤。
2.更高的移植性。在Unix和Windows下有C編程經(jīng)驗(yàn)的朋友應(yīng)該對(duì)于兼容
性深有體會(huì),很多代碼純粹是為了適應(yīng)不同的系統(tǒng)增添的,對(duì)于實(shí)際工作沒多
大用處。但Ada的初始語言環(huán)境中就有了異常(約等于Unix下的Signal)、
任務(wù)(線程)、分布式計(jì)算、隨機(jī)數(shù)產(chǎn)生、寬字符集很多特性的支持,而在現(xiàn)
在的具體操作系統(tǒng)中,這些特性往往隨系統(tǒng)而異。即使Ada95里缺少一些功
能,也可以通過額外標(biāo)準(zhǔn)和函數(shù)庫來彌補(bǔ):GDI庫,可以用GtkAda,
在Windows和X下通用;Ada也有一個(gè)Posix接口的標(biāo)準(zhǔn),可以使用函數(shù)
庫Florist來調(diào)用Posix的函數(shù)用戶層是大大省力一只要自己的操作系統(tǒng)上
有所需的編譯器和函數(shù)庫即可。
3.語法明確,基本上沒有令人混淆的地方。Ada程序的源代碼遠(yuǎn)遠(yuǎn)
比C或C++的代碼易懂??闯绦虻娜耸菧p輕了不少腦負(fù)擔(dān)。
總之,C和C++能做的Ada肯定能做,但Ada要省時(shí)方便的多。讀者在學(xué)習(xí)Ada
之后,無需多說也就明白了,筆者在初學(xué)Ada時(shí)就有耳目一新的感覺,唯一的遺
憾是Ada不流行。
1.4網(wǎng)絡(luò)資源(InternetResources)
Ada雖然在國內(nèi)不流行,但在國外還是有不少網(wǎng)站,下面是只列舉一小部份,至于
更多的資源,讀者可至VenusIC查找:
1.HomeoftheBraveAdaProgrammers(HBAP),B|JAdaHome,
由MagnusKempe維護(hù),里面包含了不少Ada相關(guān)的文檔、軟件
2.PublicAdaLibrary(PAL)?PAL是Ada軟件、文檔的圖書館。主站點(diǎn)在
(WUARCHIVE),以及法國的一個(gè)映像站點(diǎn)mirrorsite,
PAL目前由RichardConn維護(hù)。
3.AdalC,由AJPO發(fā)起的一個(gè)站點(diǎn),也包含了不少相關(guān)信息。
41SIGAda,是ACM的一個(gè)SpecialInterestGroup<>
5.AdaPower,很不錯(cuò)的一個(gè)站點(diǎn),有相關(guān)教材、文檔、Faq、Linux等鏈
接。
6.AdaCoreTechnology,Gnat,Glade等軟件的老家。
7.新聞組comp.lang.ada,不用多介紹了
1.5第一個(gè)程序(TheFirstProgram)
為了了解Ada程序的大致結(jié)構(gòu),舉一個(gè)例子是難免的。大部份書籍一般都是
用"helloworld”程序來開始,我們下面就見識(shí)一個(gè)在終端屏幕上輸出“Hello
World!”的簡例。
000—filename:hello,adb;
001withAda.Text_I0;
002procedureHellois
003begin
004Ada.Text_I0.Put("HelloWorld!”);
005Ada.Text_I0.NewLine;
006endHello;
先介紹一下在本教材中代碼的一些問題:每行代碼前的000,001等數(shù)字表示該代
碼是第幾行,只為了講解方便,在實(shí)際源代碼中是不存在的;with,procedure等
保留字(reservedword)都用粗體表示,以示區(qū)別;有些字是用斜體表示,表示該字
是用其它有效字符替換。
現(xiàn)在讓我們分析上述的簡單程序:
[ooo]標(biāo)示該程序文件名為hello.adb,在程序中并不需要;-是注釋符,表示從其
所在位置至行尾都是注釋,對(duì)程序沒有什么影響,與C的/**/類似。
[ooi]Ada.Text」O是預(yù)定義的一個(gè)程序包(package);withpackage_name和
C的include功能差不多。
[oo2]-[oo6]是程序的主體部份。與C下的main函數(shù)類似,Ada也需要一個(gè)主過
程(mainprocedure),在這個(gè)例子中是過程Hello。過程的用法和上例一樣,都是
procedureprocedure_nameis
statementsl;
begin
statements2;
endprocedure_name;
statemen11可以是變量、常量、函數(shù)、過程等的聲明;statements2是過程
procedure_name要執(zhí)行的語句,對(duì)象的聲明不能在這部份;end后
的procedure_name不是必需的,但為了程序的可讀性,應(yīng)加上。
[003],[004]分別輸出"HelloWorld!"和新行符。Put和New_Line都是
Ada.Text_IO里的過程。
但上7例調(diào)用過程Put和New_Line的方法比較羅嗦,因此我們也可以使用use
語句:
ooo—filename:hello.adb;
001withAda.Text_IO;useAda.Text_IO;
002procedureHellois
003begin
004Put("HelloWorld!J,);
005New_Line;
006endHello;
這樣Ada編譯器就能在程序包Ada.Text_IO中自動(dòng)搜尋Put,New_Line,而無需
用戶指定它們所在的準(zhǔn)確位置。
我們?cè)趯⑸侠晕⒏膭?dòng)以下,以使讀者了解一下聲明部份:
000--filename:hello,adb
001withAda.Text_IO;useAda.Text_IO;
002procedureHellois
003Str:String:="HelloWorld!”;
004begin
005Put(Str);
006New_Line;
007endHello;
在is和begin之間,聲明了一個(gè)字符串變量Str,它的初始值為“HelloWorld”。
String是預(yù)定義的字符串類型。上述的聲明方式和Pascal差不多?,F(xiàn)在我們對(duì)
Ada程序長的什么樣已有了基本的認(rèn)識(shí),下面需要了解兒個(gè)術(shù)語。一個(gè)Ada程序
是由一個(gè)或多個(gè)程序單元組成(programunit)。一個(gè)程序單元可以為:
1.子程序(subprogram),定義一些可執(zhí)行運(yùn)算。過程(procedure)和函數(shù)
(function)都是子程序。
2.程序包(package),定義一些實(shí)體(entity)o程序包是Ada中的主要分組
機(jī)制,類似于C的函數(shù)庫,Modula的"module”。
3.任務(wù)單元(taskunit),與線程類似,定義一些計(jì)算,然后并發(fā)執(zhí)行。
4-保護(hù)單元(protectedunit),在并發(fā)計(jì)算中協(xié)調(diào)數(shù)據(jù)共享,這在Ada83中
不存在。
5.類屬單元(genericunit),幫助構(gòu)建可重用組建,和C++的模板類似。
后3類屬于高級(jí)話題,在后面的章節(jié)中我們會(huì)依次介紹。程序單元又可為兩部份:
1.聲明部份(declaration)。定義對(duì)其它程序的接口,有些可用資源可以被用戶
使用,與C下的'.h’文件相似。
2.主體部份(body)。是聲明部份的具體實(shí)現(xiàn),等價(jià)與C的'.c'文件。
其中程序包(package)和子程序(subprogram)是用的最廣泛的2個(gè)程序單元。大
部份Ada程序基于一堆程序包,在以一個(gè)主過程(mainproceudre)來開始Ada程
序。第2章基本數(shù)據(jù)類型和表達(dá)式(BasicTypesandExpressions)2.1概述
(Overview)數(shù)據(jù)類型是一門計(jì)算機(jī)語言最基本的特性,表示一個(gè)對(duì)象的類型,是
數(shù)字、字符或其它類型。由于Ada在數(shù)據(jù)類型上提供的強(qiáng)大處理能力,我們又不
能很簡單地認(rèn)為數(shù)據(jù)類型僅是定義一個(gè)對(duì)象的類型。在Ada里,數(shù)據(jù)類型可以自
己創(chuàng)建,它的相關(guān)運(yùn)算符也可以自己定義,同時(shí)又有數(shù)據(jù)類型屬性這項(xiàng)特性,具有
相當(dāng)大的靈活性。學(xué)過其它的語言,特別是有C和Pascal背景的朋友初次接觸時(shí)
可能會(huì)感到有點(diǎn)新鮮。創(chuàng)建新類型,是用戶自己定義數(shù)據(jù)類型,包括該類型的名
稱、取值范圍及相關(guān)操作;其中又包括了派生類型和創(chuàng)建子類型,即以現(xiàn)有數(shù)據(jù)類
型為母類型創(chuàng)建新類型,繼承母類型的一部份屬性。數(shù)據(jù)類型屬性,如同我們玩
RPG游戲時(shí)的人物屬性:體力值、魔法值一樣,是說明該類型固有的屬性,包括
最小取值范圍、最大取值范圍等等。本章將會(huì)先介紹詞法元素以及創(chuàng)建數(shù)據(jù)類型
的基礎(chǔ)性知識(shí),然后是整型(integer)、實(shí)型(real)、字符型(character)、布爾型
(boolean)、枚舉類型(enumuration)這幾種標(biāo)量類型,最后則是相關(guān)的數(shù)據(jù)類型
屬性、類型限制和類型轉(zhuǎn)換、表達(dá)式和運(yùn)算符。2.2詞法元素(LexicalElement)
Ada里的詞法元素與其它語言的定義還是有不小差別,下面按照RM95關(guān)于詞法
元素的分類來逐項(xiàng)介紹,包括標(biāo)識(shí)符、保留字、字符:、數(shù)值文字等及它們的一些規(guī)
則。2.2.1基本字符集(CharacterSet)Ada95規(guī)定的標(biāo)準(zhǔn)字符集是Latin-1,支持
8位(基于ISO-8869)和16位(基于ISO-10646)字符,在非標(biāo)準(zhǔn)模式下也可用本地
字符集,具體情況取決于當(dāng)前的系統(tǒng)。(一般來說,涉及字符時(shí)默認(rèn)是指Latin-1,
程序幾乎都是用Latin-1字符集寫的)字符在RM95中是分成了三類:圖形字符
(graphiccharacter)、格式控制符(formateffector)、其它控制符(othercontrol
function),它們所表示的范圍為:圖形字符包括字母(letter)、數(shù)字(digit)、空格符
(space)>特殊字符(specialcharacter)(例如"#&*()*+,-./:;<=>_|{}[]);
格式控制符包括水平制表符(HT)、垂直制表符(VT)、回車(CR)、換行(LF)、換頁
(FF);其它控制符則是除了格式控制符以外的控制符。更詳細(xì)的內(nèi)容參見RM95、
ISO8869,ISO106460Ada是大小寫忽略的(除了字符和字符串中的實(shí)際內(nèi)容,
如字符'z'和'Z'不相同,但標(biāo)識(shí)符z和Z相同),但為了可讀性,一般來說變量名或
函數(shù)名首字母都會(huì)大寫,其余小寫,縮近格式也需要引起注意。根據(jù)實(shí)際情況盡量
保證可讀性。為了兼容性,Ada95要求編譯器最少支持一行字符串和一個(gè)詞法元
素的長度為200個(gè)字符(不包括行尾符)。Ada在字符集上并沒有很嚴(yán)格要求編
譯器一定要怎樣,但應(yīng)該支持標(biāo)準(zhǔn)字符集。2.2.2標(biāo)識(shí)符(Identifier)Ada中不
管是變量、函數(shù)還是其它對(duì)象都需要一個(gè)名稱,這就叫做標(biāo)識(shí)符:。如X、Count.
me就是簡單的標(biāo)識(shí)符。Ada中的標(biāo)識(shí)符有以下一些注意點(diǎn):1.標(biāo)識(shí)符一定要是字
母開頭,接下去可以是數(shù)字和下劃線,結(jié)尾不能為下劃線。如Fig_、_Lik,ime
是不合法的。2.兩個(gè)連續(xù)的下劃線不能在一起,因?yàn)橛行┐蛴C(jī)可能會(huì)將兩個(gè)下
劃線當(dāng)作一個(gè)處理。3.雖然單個(gè)字符可作為標(biāo)識(shí)符,但一般情況下不應(yīng)該濫用這
項(xiàng)特性(我不知道這除了少敲幾個(gè)字外,還有什么意義,想想數(shù)字o和字母0、數(shù)
字1和字母1吧,絕對(duì)害死人的做法)。4.不能將保留字作為標(biāo)識(shí)符。在Ada
83中,標(biāo)識(shí)符包括了保留字,但在Ada95中保留字從標(biāo)識(shí)符中分離了出來。5--
如上節(jié)所提及的,標(biāo)識(shí)符是不分大小寫的,但為了可讀性,請(qǐng)注意你對(duì)標(biāo)識(shí)符的命
名。2.2.3保留字(ReservedWord)保留字在程序語法中有特殊的含義,不屬
于標(biāo)識(shí)符范圍,這與C和Pascal等語言的定義有所不同。Ada95中的保留字如
F:abortabsabstractacceptaccessaliasedallandarrayatbegin
bodycaseconstantdeclaredelaydeltadigitsdoelseelsifendentry
exceptionexitforfunctiongenericgotoifinislimitedloopmodnew
notnulloforothersoutpackagepragmaprivateprocedureprotected
raiserangerecordremrenamesrequeuereturnreverseselect
separatesubtypetaggedtaskterminatethentypeuntilusewhenwhile
withxor在以后的內(nèi)容中,我們會(huì)逐個(gè)解釋它們的含義及作用。Ada95的保留字
比原先添力。了6個(gè):abstract,aliased,protected,requeue,tagged
和until,雖然這可能會(huì)牽連到兼容性問題,但通常也無須計(jì)較這點(diǎn)。2.2.4分隔
符(SeparatorandDelimiter)Ada程序中,各元素之間需要空格符、格式控制
符或EOF隔開。RM95里將它們作為separator,而delimiter則是指下列特殊字符
(中文有點(diǎn)說不清楚):|或是復(fù)合型的:=〉..**:=/=>=
<=??<>o當(dāng)分隔符作為注釋、字符串、字符、數(shù)值的一部分時(shí),就不再是分
隔符了。2.2.5數(shù)值文字(NumericLiteral)數(shù)值文字就是指數(shù)字。Ada和
Pascal相同,將數(shù)字分為實(shí)數(shù)型(realliteral)和整數(shù)型(integerliteral)兩大類。實(shí)數(shù)
型是有小數(shù)點(diǎn)的數(shù)字,整數(shù)型則無小數(shù)點(diǎn)。如1.2787,0.871,7.0是實(shí)數(shù)型,而-
882,5443是整數(shù)型。Ada在數(shù)字表示上有一個(gè)很好的特性就是可以明確指定使用
何種基數(shù)(2進(jìn)制到16進(jìn)制)表示,下面是數(shù)字的表示:十進(jìn)制數(shù)(Decimal
Literal)不管是實(shí)型還是整型數(shù),都可以在其間加上下劃線,使長數(shù)字更加易
讀。如56886515645125615,可寫為56_886_515_645_125_615或
5一6886一536一4512—5615,下劃線并不改變數(shù)字的值。但兩個(gè)下劃線不能是連續(xù)
的,卜劃線也不可以在數(shù)字首部和尾部,如676_66和67.E4都是非法的。字母
E作為數(shù)字的指數(shù),同時(shí)適用于實(shí)型和整型。如123_98E4、5Q87E-5、48E7都
是合法的,但負(fù)指數(shù)不能用于整型,指數(shù)也一定要是整數(shù)。E大小寫皆可以?;?/p>
型數(shù)字(BasedLiteral)在大部分語言中,都使用10進(jìn)制數(shù)字表示;Ada里整數(shù)
可以不用10進(jìn)制的表示方法書寫,而是直接使用2至16進(jìn)制的表示法,格式
為:Base#Number#,Base表示所采用的進(jìn)制,Number為該進(jìn)制下所表示的
數(shù)字。2#1001_1001#,表示2進(jìn)制數(shù)10011001,中間的下劃線可取消,其10進(jìn)值
為153;10#153#,表示10進(jìn)制數(shù)153,等價(jià)與153;16#9。#,表示16進(jìn)制數(shù)9。,
其10進(jìn)值為144;2.2.6字符文字(CharacterLiteral)字符文字的表示是單個(gè)
圖形字符在單引號(hào)'‘中,如'a'表示小寫字母a,'K'表示大寫字母K;1'表示一個(gè)單引
號(hào),''表示一個(gè)空格。2.2.7字符串文字(StringLiteral)字符串是雙引號(hào)(”")之
間的有序圖形字符。如"WhatIsaid."就是一個(gè)字符串。表示空字符串時(shí)直接用”
“。如果字符串中有雙引號(hào),一個(gè)雙引號(hào)要用兩個(gè)”來表示。如"Hesaid,”"1am
hungry.,,n而"Hesaid,""Iamhungry."或"Hesaid/'Iamhungry.""是不合法
的。至于其它字符,如$%之類可以直接出現(xiàn)在兩個(gè)雙引號(hào)間。與C語言不同,
Ada里沒有與之相同的轉(zhuǎn)義字符,并且E0L不會(huì)算到字符串中。2.2.8注釋
(Comment)注釋由兩個(gè)連字號(hào)(hyphen)(-)開始,直到行尾??梢猿霈F(xiàn)在程序的
任一個(gè)地方,不影響程序本身。例如:—thecomment;end;-processingofLine
iscomplete.2.2.9PragmasPragma是編譯指示(compiledirective),給編譯器指
令如優(yōu)化程序,列表控制等。它的作用往往不只影響一個(gè)編譯單元,而是整個(gè)程
序。Pragma是些預(yù)先定義的指令,如pragmaPage,pragmaList(OFF),編譯器也
可擴(kuò)展RM95中pragmao我們先接觸List,Page,Optimize這3個(gè)pragma?更
多內(nèi)容我們會(huì)在以后接觸。pragmaList(identifier);pragmaPage;pragma
Optimize(identifier);pragmaList將identifierOn或Off作為它的參數(shù)。它指定
編譯列表(listingofcompilation)是繼續(xù)還是停止,直到在同一個(gè)編譯單元內(nèi),一
個(gè)pragmaList使用了相反的參數(shù)。pragmaPage指定在pragma后的程序正文
在新頁開始(如果編譯器正在列表)pragmaOptimize有Time,Space或0仟3
個(gè)參數(shù),它的影響區(qū)域直到pragama所在編譯單元的底部。Time和Space指
示優(yōu)化時(shí)間還是優(yōu)化空間,0任則關(guān)閉優(yōu)化。下面是簡單的例子:pragma
List(Off);關(guān)閉列表生成pragmaOptimize(Off);關(guān)閉可選的優(yōu)化
不過,上述3個(gè)pragma是影響編譯過程用的,基本上用戶也用不著,以后涉
及的inline,Pure等pragma使用頻率倒挺高2.3創(chuàng)建數(shù)據(jù)類型和子類型
(CreatingTypesandSubtypes)使用變量時(shí),除了以某標(biāo)識(shí)符作為變量的名稱
外,還要指定該變量的數(shù)據(jù)類型。一個(gè)數(shù)據(jù)類型定義了變量可接受的值以及所能執(zhí)
行的操作。比如說,一個(gè)數(shù)據(jù)類型為Age的變量Bill,Age的取值范圍為1..100,并
只有+-這兩種操作,在這里,對(duì)象(object)為名為Bill的變量,它的取值在1..100
之間(包括1,100),值的變化只能通過+-這些基本運(yùn)算符(primitiveoperation)
來實(shí)現(xiàn),而無法通過*/等其它運(yùn)算符。Ada中的數(shù)據(jù)類型,包括預(yù)定義類型,都是
按照一定的格式在程序包中創(chuàng)建的。下面就介紹創(chuàng)建數(shù)據(jù)類型的一些基本內(nèi)容,更
多相關(guān)內(nèi)容會(huì)在以后見到。2.3.1創(chuàng)建新的數(shù)據(jù)類型創(chuàng)建一個(gè)新類型,需要使用
保留字type,is,range。格式如下:typetype_nameisrange
range_specifcation;type_name為新類型的名稱,是一個(gè)合法標(biāo)識(shí)符:
range_specifcation表示該類型的取值范圍,表示方式為First..Last,如1..100,
-9-10o例如創(chuàng)建上面提及的一個(gè)新類型Age:typeAgeisrange1..100;這樣
就有了一個(gè)數(shù)據(jù)類型Age,取值范圍1..100。有一點(diǎn)要注意:
range_specfication中First要大于Last。如typemonthsisrange12..o,實(shí)
際上months是一個(gè)空集(null),而不是所期望的0..12。不同數(shù)據(jù)類型之間是不能
進(jìn)行混合運(yùn)算的,即使取值范圍和運(yùn)算符一樣,看以下的程序例子:ooo—
filename:putwage.adbooiwithAda.Text_IO;useAda.Text_IO;002with
Ada.Integer_Text_IO;useAda.Integer_Text_IO;003procedureputwageis
004typeAgeisrange1..100;005typeWageisrange1..100;
006Bill_Age:Age:=56;007Bill_Wage:Wage:=56;008begin009Put
("Totalwageis");010Put(Bill_Wage*Bill_Age);oilNew_Line;012end
putwage;[001H002]:使用軟件包Ada.Text_IO,Ada.Integer_Text_IO;兩個(gè)軟件
包分別處理字符類輸出和整數(shù)輸出。[003][oo8][012]定義一個(gè)過程putwageo
[OO4]-[OO5]:定義新的數(shù)據(jù)類型Age,Wage,它們?nèi)≈捣秶紴閕..ioOo[006]-
[007]:聲明兩個(gè)變量BiH_Age,Bin_Wage,類型分別為Age和Wage,并賦予相同初
始值56。[009H01U:依次輸出字符串"Totalwageis",整數(shù)Bill_Wage和Bill_Age
的乘積,和??個(gè)新行符(EOL)。以上程序看上去毫無問題,但根本無法編譯通過。
首先,沒有定義類型Age和wage的*操作,因此Bill_Age和Bill_Wage無法相
乘;第二,兩者數(shù)據(jù)類型不同,即使定義了*操作,還是無法相乘。當(dāng)然也可使用
后面提到的類型轉(zhuǎn)換,如果將[oio]改為Put(Integer(Bill_wage)*
Integer(Bill_Age)),將會(huì)輸出所要的3136;但圳果改成Put(Integer(Bill_wage*
56)),看上去也行的通,但實(shí)際結(jié)果卻不是3136。不同數(shù)據(jù)之間不能進(jìn)行運(yùn)算,
要牢牢記住。(Integer是預(yù)先定義的?個(gè)整型,Integer(Bill_Wage)是將
BilLWage強(qiáng)制轉(zhuǎn)換為整型)。2.3.2派生類型大家可能會(huì)發(fā)現(xiàn),如果像上面一
樣創(chuàng)建一個(gè)截然不同的新類型,還需要定義它的運(yùn)算符:,使用很不方便。因此,往
往是派生現(xiàn)有的類型,其格式為:typetype_nameisnewold_type{range
range_specification);type_name為新類型的名稱,是一個(gè)合法標(biāo)識(shí)符;
rangerange_specification表示該類型的取值范圍,是可選的,沒有的話表示
新類型type_name的取值范圍和old_type一樣。如將上例改為:000—
filename:putwage.adb001withAda.Text_IO;useAda.Text_IO;002with
Ada.Integer_Text_IO;useAda.Integer_Text_IO;003procedureputwageis
004typeAgeisnewIntegerrange1..100;005typewageisnewInteger;
006Bill_Age:Age:=56;007Bill_Wage:Wage:=56;008begin009Put
("Totalwageis");010Put(Bill_Wage*Bill_Age);oilNew_Line;012end
putwage;上例還是不能編譯通過,因?yàn)榕缮愋椭焕^承母類型的屬性,如運(yùn)算
符,不同的派生類型即使母類型相同也還是屬于不相同的類型。但將[10]改為Put
(Integer(Bill_wage*56))則能輸出正確的結(jié)果。但是派生類型使用還是麻煩了一
點(diǎn),不同類型之間即使都是數(shù)字類型也無法混合使用,只是自己不用創(chuàng)建運(yùn)算符省
力了點(diǎn)。2.3.3創(chuàng)建子類型創(chuàng)建新類型和派生類型的麻煩從上文就可以感受的
到,特別是在科學(xué)計(jì)算這些有很多種小類型的軟件當(dāng)中,上述兩種方法實(shí)在過于繁
雜。這時(shí)子類型(subtype)就相當(dāng)有用,子類型的定義格式為:subtype
type_nameisold_type{rangerange_specification};type_name為新類
型的名稱,是一個(gè)合法標(biāo)識(shí)符;rangerange_specification表示該類型的取值
范圍,是可選的,沒有的話表示新類型type_name的取值范圍和old_type—■
樣。再將先前的例子改一下:000—putwage.adb001withAda.Text_IO;use
Ada.Text_IO;002withAda.Integer_Text_IO;useAda.Integer_Text_IO;
003procedureputwageis004subtypeAgeisIntegerrange1..100;
005subtypeWageisInteger;006Bill_Age:Age:=56;007Bill_Wage:
Wage:=56;008begin009Put("Totalwageis");010Put(Bill_Wage*
Bill_Age);oilNew_Line;012endputwage;編譯通過,輸出值為3136。子類型
不僅繼承母類型的屬性,而且和母類型、其它同母類型的子類型可混合使用。在
前面的例子中的,我們都提到了取值范圍,這也是Ada的一項(xiàng)“特色”:Ada不同于
C和Pascal-賦給一個(gè)變量超過其取值范圍的值或進(jìn)行不合法運(yùn)算,會(huì)輸出錯(cuò)誤的
值而不報(bào)錯(cuò),與此相反,Ada程序在編譯時(shí)會(huì)提示錯(cuò)誤,或在運(yùn)行Ada程序時(shí)產(chǎn)
生Constraint_Error異常(異常和C中的信號(hào)Signal差不多,詳見第9章異常
(Exception)),掛起程序,來減少程序的調(diào)試時(shí)間。2.4標(biāo)量類型(Scalar
Type)大部份語言,基本的數(shù)據(jù)類型如果按照該類型所表示的數(shù)據(jù)類型來分,.
般來說可分為整型(integer),實(shí)型(real),布爾型(boolean),字符型(character)這
四類,并以它們?yōu)榛A(chǔ)構(gòu)成了數(shù)組,記錄等其它更復(fù)雜的數(shù)據(jù)類型。在程序包
Standard中預(yù)定義了一些簡單數(shù)據(jù)類型,例如Integer,Long_Integer?Float,
Long_Float,Boolean,Character,Wide_Character,以及這些數(shù)據(jù)類型的運(yùn)算
符。下面我們除了學(xué)習(xí)上述的4種標(biāo)量類型(ScalarType)外,還要學(xué)習(xí)一下枚
舉類型(Enumration)。由于Ada中布爾型和字符型都是由枚舉類型實(shí)現(xiàn)的,因此
也可將這兩種類型認(rèn)為是枚舉類型。2.4.1整型(Integer)Integer整型一個(gè)整型
數(shù)據(jù)能存放--個(gè)整數(shù)。預(yù)定義的整型有Integer,Short_Integer,
Short_Short_Integer,Long_Integer,Long_Long_Integer還有Integer的j類
型Positive,NaturaloRM95沒有規(guī)定Integer及其它整型的具體取值范圍及其位
數(shù),由編譯器決定。只規(guī)定了沒多大意思的最小取值范圍,如要求一個(gè)Integer至
少要為16位數(shù),最小取值范圍為-32767“32767(-2**15+1.-2**15-1)?因此還有
Integer_8,Integer_i6,Integer_32,Integer_64這些指定了位數(shù)的整型,以方便用
戶。在RM95里,也就是編譯器實(shí)現(xiàn)里,以上類型聲明格式為:typeIntegeris
rangeimplementation_defined(Long」nteger它們也一樣)subtype
PositiveisIntegerrangei.Jnteger'Last;subtypeNaturalisIntegerrange
O.Jnteger'Last;(Integer'Last表示Integer的最后一個(gè)值,即上限,見2.5數(shù)據(jù)類
型屬性)程序System里定義了整數(shù)的取值范圍:Min」nt:constant:=
Long_Long_Integer'First;Max_Int:constant:=Long_Long_Integer'Last;
Modular整型還有…類整型是Modular,異于上面的整型。如果將Integer整型與
C中的signedint相類比,它們的取值范圍可包括負(fù)數(shù);那么Modular類型就是
unsignedint,不能包含負(fù)數(shù)。其聲明格式為:typetyep_nameismod
range_specification;其中的range_specification應(yīng)為一個(gè)正
數(shù);type_name的取值范圍為(o..range_specification-1)?如下面類型
Byte:typeByteismod256;這里Byte的取值范圍為o..255。Modular類型在
程序包System也有常量限制,range_specification如是2的嘉則不能大于
Max_Binary_Modulus,如不是嘉的形式則不能大于
Max_Nonbinary_ModuluSo這兩個(gè)常量的聲明一般如下:
Max_Binary_Modulus:constant:=2**Long_Long_Integer'Size;
Max_Nonbinary_Modulus:constant:=Integer'Last;細(xì)心的讀者可能會(huì)發(fā)現(xiàn)上
面兩個(gè)常量的值實(shí)際上是不一樣的,也就是說Modular類型實(shí)際上有兩個(gè)不同的
限制。RM95關(guān)于這點(diǎn)的解釋是,2進(jìn)制兼容機(jī)上,Max_Nonbinary_Moduhis的
值大于Max_int很難實(shí)現(xiàn)。2.4.2實(shí)型(Real)相對(duì)于整型表示整數(shù),實(shí)型則表示
浮點(diǎn)數(shù)。實(shí)型分為兩大類:浮點(diǎn)類型(floatingpoint)和定點(diǎn)類型(fixedpoint)?它
們之間的區(qū)別在于浮點(diǎn)類型有一個(gè)相對(duì)誤差;定點(diǎn)類型則有一個(gè)界定誤差,該誤差
的絕對(duì)值稱為delta。下面就分類介紹這兩類數(shù)據(jù)類型。浮點(diǎn)類型(Floating
Type)浮點(diǎn)類型預(yù)定義的有Float,Short_Float,Short_Short_Float,
Long_Float,Long_Long_Float等,它們的聲明格式入下:typetype_nameis
digitsnumber[rangerange_specification];digitsnumber表示這個(gè)浮點(diǎn)
類型精度,即取number位有效數(shù)字,因此number要大于0;range
range_specification是可選的,表示該類型的取值范圍。下面是幾個(gè)例子:
typeRealisdigits8;typeMassisdigits7range0.0..1.0E35;subtype
ProbabilityisRealrange0.0..1.0;Real表示精度為8位的符點(diǎn)數(shù)類型,它的取
值范圍由于沒給定,實(shí)際上由編譯器來決定;RM95里關(guān)于這種情況是給出了安
全范圍(saferange),取值范圍是-IO.O**(4*D)..+IO.O**(4*D),D表示精度,此例中
為8,所以Real的安全取值范圍一?般來說應(yīng)為-10.0E32..+10.0E32。Mass是表示
精度為7位的符點(diǎn)型,取值范圍為00-1.0E35;Probability是Real的『類型,精
度也是8位,取值范圍0.0..1.0;程序包System定義了精度的兩個(gè)上限:
Max_Base_Digits和Max_Digits,一般來說應(yīng)為Max_Base_Digits:constant:=
Long_Long_Floafdigits;(BPLong_Long_Float的精度)
Max_Digits:conslant:=Long_Long_Float,digits;當(dāng)range_specification指
定時(shí),所定義類型的精度不能大于Max_Base_Digits;當(dāng)range_specification
沒有指定時(shí),所定義類型的精度不能大于Max_Digits。定點(diǎn)類型定點(diǎn)類型主要是
多了一個(gè)delta,它表示該浮點(diǎn)類型的絕對(duì)誤差。比方說美元精確到0.01元(美
分),則表示美元的數(shù)據(jù)類型Dollar的delta為0.01,不像浮點(diǎn)型是近似到
O.Olo定點(diǎn)型的聲明格式有兩種:普通定點(diǎn)型:typetype_nameisdelta
delta_number_rangerange_specification;十進(jìn)制定點(diǎn)型:type
type_nameisdeltadelta_numberdigitsdigit_number
[rangerange_specification];除deltadelta_number外,各部份意義與浮
點(diǎn)型相同。定點(diǎn)型中有一個(gè)small的概念。定點(diǎn)數(shù)由一個(gè)數(shù)字的整數(shù)倍組成,這個(gè)
數(shù)字就稱為該定點(diǎn)數(shù)類型的small。如果是普通定點(diǎn)型,則small的值可以被用戶
指定(見下節(jié)數(shù)據(jù)類型屬性),但不能大于該類型的delat;如果沒有指定,small
值由具體實(shí)現(xiàn)決定,但不能大于delta。如果是十進(jìn)制定點(diǎn)型,則small值為
delta,delta應(yīng)為10的基,如果指定了該定點(diǎn)型的取值范圍,則范圍應(yīng)在-
(io**digits-i)*delta..+(io**digits-i)*delta之間??匆幌孪吕簍ypeVoltis
delta0.125range0.0..255.0;typeFractionisdeltaSystem.Fine_Deltarange
-1.0..1.0;typeMoneyisdelta0.01digits15;subtypeSalaryisMoneydigits
10;2.4.3布爾型(Boolean)邏輯運(yùn)算通常需要表示“是”和“非”這兩個(gè)值,這時(shí)就
需要使用布爾型。Ada中的布爾型與Pascal中的類似,是True和False兩個(gè)值。
布爾型屬于枚舉數(shù)據(jù)類型,它在程序包Standard中定義如下:typeBooleanis
(True,False);習(xí)慣于C語言的朋友在這里需要注意一下,Boolean的兩個(gè)值
True,False和整型沒有什么關(guān)系,而不是C語言中往往將True定義為值1,False
為2。2.4.4字符型(Character)Ada83最初只支持7位字符.這條限制在Ada95
制訂前已經(jīng)放松了,但一些老編譯器如MeridianAda還是強(qiáng)制執(zhí)行.這導(dǎo)致在一臺(tái)
PC上顯示圖形字符時(shí)出現(xiàn)問題;因此,在一般情況下,是使用整型來顯示Ascii127
以后的字符,并使用編譯器廠商提供的特殊函數(shù)。在Ada95里,基本字符集已由原
來的ISO646標(biāo)準(zhǔn)的7位字符變?yōu)镮SO8859標(biāo)準(zhǔn)的8位字符,基于Latin-1并且
提供了256個(gè)字符位置。Ada95同樣也支持寬字符ISO10646,有2**16個(gè)的字
符位置。因此現(xiàn)代編譯器能很好地處理8位字符和16位字符。7位字符在已經(jīng)廢
棄的程序包Standard.Ascii內(nèi)定義。在程序包Standard內(nèi)預(yù)定義的字符型
Character和Wide_Character分別表示Latin-1字符集和寬字符集,類型
Wide_Character已經(jīng)包含了類型Character并以它作為前256個(gè)字符。程序包
Ada.Characters.Latin_i和Ada.Characters.Wide_Latin_i提供了Latin-1字符集
的可用名稱,Ada.Characters.Han祖ing則提供一些基本的字符處理函數(shù)。具體內(nèi)
容見第14章字符和字符串處理。從下例可以了解一下字符型:000-filename:
puta.adb001withAda.Text_IO;useAda.Text_IO;002procedureputais
003subtypeSmall_Characteris{'a''d');004Level:
Small_Character:="a);005begin006Put(l<YoulevelisM);007Put(Level);
008New_Line;009endputa;[003]創(chuàng)建了一""b字符類型Small_Character,包
含a,b,c,d四個(gè)字母;如C語言一樣,使用字符時(shí)需加[004]聲明變量Level,類
型為SmalLCharacter,值為字母a。上面這個(gè)例子主要還是說明一下字符類是怎
樣定義的,但Character和Wide_Chracter實(shí)際實(shí)現(xiàn)卻不是這么簡單。2.4.5枚
舉類型(Enumeration)有時(shí)候我們需要一個(gè)變量能表示一組特定值中的一個(gè)。如
today這個(gè)變量,我們希望它的值是Monday,Tuesday,Wednesday,Thursday,
Friday,Saturday,Sunday其中的一個(gè),這時(shí)枚舉類型就相當(dāng)有用,上述情況中就
可以創(chuàng)建新類型Day,如下:typeDayis(Monday,Tuesday,Wednesday,
Thursday,Friday,Saturday,Sunday);然后聲明變量today的數(shù)據(jù)類型為Day:
today:Day;這樣today就能接受Monday,Tuesday,Wednesday,Thursday,
Friday,Saturday,Sunday這幾個(gè)值中的任意一個(gè)。前面提及的類型
Character,Wide_Character,Boolean都是枚舉類型,也按照下面給出的格式聲明:
typetype_nameis(elememt_list);element_list需列舉出該類型所有的可
能值。Ada能自動(dòng)檢測(cè)上下文,因此大部份情況下能分辨不同枚舉數(shù)據(jù)類型下的
枚舉元素,如再聲明一個(gè)類型Weekend:typeWeekendis(Saturday,Sunday);
或subtypeWeekendisrangeSaturday..Sunday;賦給上例中的變量Today值
為Sunday時(shí),不會(huì)產(chǎn)生歧義;但在有些情況下,Ada無法分辨枚舉元素時(shí)則會(huì)產(chǎn)
生問題,這時(shí)就要使用類型限制,詳見2.6類型限制和類型轉(zhuǎn)換Ada中的基本數(shù)
據(jù)類型就講到這里,實(shí)際上本節(jié)是基于上一節(jié)內(nèi)容的擴(kuò)展,說穿了還是創(chuàng)建數(shù)據(jù)類
型。Ada在數(shù)據(jù)類型處理上提供的強(qiáng)大功能在接下的章節(jié)里我們將會(huì)接觸的更多,
在這方面Ada的確比其它大部份語言做的好多了,熟悉C,Pascal的朋友大概會(huì)感
到相當(dāng)有意思。2.5數(shù)據(jù)類型屬性(Attributes)數(shù)據(jù)類型屬性,表示某個(gè)數(shù)據(jù)類
型的具體特征一取值范圍,最小值,最大值,某數(shù)在該類型中的位置……應(yīng)該說是
相當(dāng)有用的--起碼不像C語言,還要翻翻系統(tǒng)手冊(cè)才能知道某個(gè)數(shù)據(jù)類型的具體
定義。這些屬性的用法和調(diào)用函數(shù)一樣,也可以認(rèn)為它們就是預(yù)定義的函數(shù)一雖
然不怎么準(zhǔn)確,關(guān)于函數(shù),詳見第6章子程序;有些返回值為通用類型
(universaltype)和字符串型。數(shù)據(jù)類型的屬性既可以使用預(yù)先定義的操作,也
可以自己定義數(shù)據(jù)類型的屬性,如S'First是返回S類型的下限,如果用戶不滿
意默認(rèn)的屬性,也可自己指定S'First(雖然沒必要),如:forS'Firstuse
My_Version_First;My_Version_First是用戶自己的函數(shù),以后當(dāng)使用S'First
時(shí),實(shí)際上調(diào)用My_Version_First;有些數(shù)據(jù)屬性也可以直接用數(shù)字標(biāo)示,如:
forS'Firstuse0;這樣,S,First的值就成了0。在很多地方,如內(nèi)存管理中,這
種用法還是比較普遍的。下面簡單地列出標(biāo)量類型的屬性,S表示某個(gè)標(biāo)量類型:
2.5.1通用標(biāo)量類型屬性S'First返回S類型的下限,返回值為S型。S'Last返回
S類型的上限,返回值為S型。S'Range返回S類型的取值范圍,即S'First..
S'Last。S'Base表示S類型的一個(gè)子類型,但沒有范圍限制(單純從取值范圍角
度講,“兒子”反而比“父母”大),稱之為基類型(basetype)oS'Min函數(shù)定義
為:function(Left,Right:S*Base)returnS'Base。比較Left和Right的大小,
返回較小值。如:Integer'Min(1,2)=1。S'Max函數(shù)定義為:function
(Left,Right:S*Base)returnS'Base?比較Left和Right的大小,返回較大值。
如:Integer'Max(1,2)=2。S'Succ函數(shù)定義為:functionS'Succ
(Arg:S*Base)returnS'Base?返回Arg的后趨。S'Pred函數(shù)定義為:function
S'Pred(Arg:S'Base)returnS'Base。返回Arg的前趨。S'Wide_Image函數(shù)定
義為:functionS'WideJmage(Arg:S'Base)returnWide_String?返回Arg
的“像”,即可顯示的字符串,這里返回寬字符串型Wide_String。如:
Float'Wide_Image(9.00)="9.OO”。詳見第三章數(shù)組。S'lmage與
S'Wide」mage一樣,但返回字符串型String。SWide_Width表示
S'Wide_Image返回的字符串的最大長度,返回值為universal_integer。
SWidth表示Slmage返回的字符串的最大長度,返回值
為universal.integer。S'Wide_Vahie函數(shù)定義為:functionSJWide_Value
(Arg:Wide_String)returnS'Base。是S'Wide_Image的逆過程,返回與
“像”Arg相對(duì)應(yīng)的S類型的值。如:FloafWide_Value(“9。0〃)=9。。。
SValue與SValue一樣,但參數(shù)Arg是String類型。252通用離散類型屬性
離散類型包括整型和枚舉型,除了上述的屬性外,還有:S'Pos函數(shù)定義
functionS'Pos(Arg:S'Base)returnuniversal_integero返回Arg在S
類型中的位置。SVal函數(shù)定義為:functionS'Pos(Arg:S'Base)return
S'Base。返回在S類型中位置為Arg的值。例如:typeColoris(red,white,
blue);ColorTos(White)=2Color'Val⑴二red2.5.3浮點(diǎn)類型屬性S'Digits返
回S類型的精度,為universal_integer類型。2.5.4定點(diǎn)類型屬性
S'Small返回S類型的small值,返回值為實(shí)型。S'Delta返回S類型的
delata,返回值為實(shí)型。STore返回S類型所表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 木材保護(hù)防腐施工合同
- 能源檢測(cè)薪酬策略
- 災(zāi)害救援中心
- 超市建設(shè)平整施工合同
- KTV裝飾施工合同
- 金屬衛(wèi)生應(yīng)急隊(duì)伍管理辦法
- 食品加工公司員工停薪留職
- 住宅小區(qū)智能門禁管理辦法
- 保齡球場(chǎng)大門地彈門施工合同
- 物流技術(shù)計(jì)量器具使用手冊(cè)
- 急停急起運(yùn)球教學(xué)設(shè)計(jì)
- 2024年江西省三校生高職英語高考試卷
- 中國古代文學(xué)智慧樹知到期末考試答案章節(jié)答案2024年廣州大學(xué)
- 重慶市南岸區(qū)2022-2023學(xué)年五年級(jí)上學(xué)期期末語文試卷
- 現(xiàn)澆鋼筋混凝土整體式肋梁樓蓋結(jié)構(gòu)-課程設(shè)計(jì)
- 掛籃施工及安全控制連續(xù)梁施工安全培訓(xùn)課件
- 學(xué)生學(xué)習(xí)概覽StudentLearningProfile
- 小班數(shù)學(xué)《認(rèn)識(shí)1到10的數(shù)字》課件
- 手工花項(xiàng)目策劃書
- 服務(wù)器維保應(yīng)急預(yù)案
- 循環(huán)系統(tǒng)病癥的臨床思維
評(píng)論
0/150
提交評(píng)論