C/C++类型到Ada

1.1 C/C++ types to Ada types.

本节尝试展示如何将C/C++类型声名移动到Ada程序中并且帮助你理解Ada代码。节1.1.8介绍了一些Ada具体的你可以用于位域、类型替代与类型尺寸等的高级主题与诀窍

注意,对象被定义为与C/C++的位置相反,对象名字在前面,(然后一个冒号),接着是对象类型,像在C/C++中那样你可以声名多个对象,它们之间用逗号隔开。

// C/C++ 对象声名
int i;
int a, b, c;
int j = 0;
int k, l = 1;
int k=1,l=2;   // C/C++可以为每个对象单独赋值

-- Ada对象声名
i : Integer;
a, b, c : Integer;
j : Integer := 0;
k, l : Integer := 1; -- Ada中只能统一赋值,要赋不同的值,那必须分开声名

 

前三个声名是一样的,它们生成一样的对象,第三个声名都是把j赋值为0 。然而第四个例子,C中K没有赋值、l赋值为1,而在Ada例子中它很清楚的K与l都被赋值为1。

另外的不同是定义常量。

// C/C++常量声名
const int days_per_week = 7;

-- Ada常量声名
days_per_week : constant Integer := 7;
days_per_week : constant := 7;

 

在Ada例程中,它可以只使用constant,不用类型来声名一个对象,编译器会选择最恰当的类型来代替它。

1.1.1 声名新类型与子类型.

之前我们挖掘Ada预定义类型的描述,这对向你们展示Ada如何定义一个类型非常重要。

Ada是一门强类型语言,实际上可能是最强的。这意味着它的类型模型是严格并绝对确定的。在C中用typedef来定义一个新名称来作为一个新的类型,想象一下,若类型的C甚至C++意味着我们实际上只是发明了一个低劣的同义词而已。思考:

typedef int INT;
INT a;
int b;

a = b; // 工作正常,没问题

编译器知道它们都是整数。 现在思考:

type INT is new Integer;
a : INT;
b : Integer;

a := b; -- 赋值失败。

 

这里很重要的关键词是new ,它概括了Ada处理那行语句的方式,它可以读为“一个新的类型INT已经从类型Integer中创建了”,而在C中,只是“一个新的名字INT作为int的别名”。

 

这个强类型可能产生一个困难,因此Ada也提供了一个特性来减少新类型与父类型之间的距离,思考:

subtype INT is Integer;
a : INT;
b : Integer;

a := b; -- works.

 

这里最重要的特性是子类型被通过某种方式强制为父类型,例如来指定一个整数值的上下边界(见以下关于范围的章节)

 

1.1.2 简单类型、整数和字符.

我们已经在上面看到了整数(Integer)类型,Ada中还有不少的类型,列出如下:

有符号整数 Integer, Long_Integer

任何的Ada编译器必须提供整数类型,这是一个有符号整数,并且贯彻定义的大小。编译器也可以自由的提供Long_Integer,Short_Integer,Long_Long_Integer等需要的类型。

 

无符号整数

Ada没有一个定义的无符号整数,因此可以通过一个范围类型来合成(见节1.1.5),Ada-95有一个定义的包,System.Unsigned_Types,它提供了一组无符号类型(的定义)。

Ada-95已经提供了一个余数类型(modular type)来指定最大值,也因此在算术上有循环的特性,下溢/上溢是不可能发生的。这意味着如果你有一个具有值0到255的余数类型,并且它的当前值是255,如果它增加1,它则会又变成0 。用在以下章节1.1.5中的范围类型(之前用于定义无符号整数)来作比较。这样的类型定义定义形式为:

type BYTE is mod 256;
type BYTE is mod 2**8;

第一个简单的指定了最大值,第二个用了一个更规范的方式来指定它,2**x形式经常用于系统编程来指定位掩码类型 。注意:这并不要求一定使用2**x形式,你可以使用任意的值,因此10**10也是合法的。

 

字符 Character{3.5.2}

这与C中的char类型非常类似,也拥有ASCII字符集。然而,它实际上定义在包Standard{A.1}中作为一个枚举类型(见章节1.1.5)。Ada中有个包Ada.Characters.Handling定义了与C中ctype.h中函数集等价的功能。

Ada Also defines a Wide_Character type for handling non ASCII character sets.

Ada也定义了一个宽字类型(Wide_Character)来处理非ASCII字符集。

 

布尔 Boolean {3.5.3}

它也定义在包Standard中,作为一个枚举类型(见以下)包含(FALSE,TRUE)。

1.1.3 Strings. {3.6.3}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值