我正试图找到自动识别Ada语言中子类型溢出错误的方法。
下面是Ada语言语法。
C := A + B;
-- A is sub type of [-3 3]
-- B is sub type of [-2 2]
-- C is sub type of [-3 3]
我想要的是,工具应该使用输入参数的最小值,最大值,中值,并记录目标参数中是否有任何溢出流。
例如最大值A的值为3和最大值B(2)的值,C变量中会有过流。
我有5000个文件,我需要确保不存在上述类型的错误。我正在寻找自动完成的方法。
答案 0 :(得分:0)
如果你在编译时知道所有的值,那就很容易了。否则它会有点复杂。但是如果你违反任何约束,你将总是在运行时获得Constraint_Error。
with Ada.Integer_Text_IO;
procedure Main is
subtype A_T is Integer range -3..3;
subtype B_T is Integer range -2..2;
subtype C_T is Integer range -3..3;
A : A_T := 3;
B : B_T := 2;
C : C_T;
AA : A_T := 1;
BB : B_T := 1;
CC : C_T;
AAA : A_T;
BBB : B_T;
CCC : C_T;
begin
C := A + B; -- Not ok warning: value not in range of type C_T,
-- Constraint_Error will be riased at run time
CC := AA + BB; -- OK, no overflow detected at compile time
Ada.Integer_Text_IO.Get(AAA); -- impossible to check at compile time,
Ada.Integer_Text_IO.Get(BBB); -- Constraint_Error will be raised at runtime if constraint violated
CCC := AAA + BBB;
end Main;