C中的Ada类型声明



有没有办法在C中声明一个新的整数类型?

在Ada,

type a is new integer;

意思是a不等价于整数变量x。

我知道typedef可以创建一个整数的别名,但它与上面的阿达代码不同。它更像是Ada中的一个子类型。

有人知道吗?

C和Ada中的类型系统不同。

C对基元类型使用结构类型系统,对结构和并集使用主格类型系统。C枚举只是命名的整数值,而不是与int分开的类型。由于C中的所有int实例在给定的硬件平台上都有相同的结构表示,因此int的所有typedef都是相同的类型。

阿达对所有类型都使用主格打字系统。类型的区别在于它们的名称,而不是它们的结构布局。因此Integer类型不同于

type My_Int is new Integer;

My_Int是一个与Integer名称不同的类型,尽管它是从Integer派生的。因此,即使这两种类型共享相同的操作和相同的内存布局,My_Int在Ada中也不是Integer。

C typedef类似于Ada子类型,因为子类型是其父类型的成员。子类型和typedef不同,因为标量类型的子类型可以定义为有限制的范围,例如:

subtype Natural is Integer range 0..Integer'Last;
subtype Positive is Integer range 1..Integer'Last;

Natural或Positive的每个实例都是一个整数值。与基类型相比,子类型的有效值范围有限。

C中的typedef语句没有简单的方法可以声明有限的值范围。C标准委员会过去曾拒绝过这方面的建议。

最新更新