使用ASIS比较Ada中两个子类型的mix,max值

时间:2018-07-14 07:15:47

标签: ada asis

我想比较两个子类型的最小值,最大值。在Ada语言中,可以在两个不同的子类型之间进行分配,例如

procedure Example_1 is
   subtype Type_1 is Integer range 0 .. 10;
   subtype Type_2 is Integer range 0 .. 30;
   A : Type_1 := 0;
   B : Type_2 := 12;
begin
   A := B;
end Example_1;

在运行时A := B会给出范围溢出错误。在ASIS中,是否可以比较子类型,子类型的最小值/最大值(整数,实数,枚举类型),以便在运行时识别溢出问题?

2 个答案:

答案 0 :(得分:2)

使用-gnatVa -gnat12编译时,编译器检测到此问题

答案 1 :(得分:1)

是的,可以使用ASIS进行检查。

有关如何提取子类型的'First'Last的信息,请参见the answer to this question