如果我将ADA中的范围定义为1 ... 1000,那么如果我增加超过1000,ADA规范是否存在已定义的行为?
例如:
type Index is range 1..1000;
idx : Index := 1;
procedure Increment is
begin
idx := idx + 1;
end
Run Code Online (Sandbox Code Playgroud)
一旦我用idx = 1000调用Increment,我应该发生什么?
你的程序将失败CONSTRAINT_ERROR.但是,这不是因为您最终尝试设置idx为1001.而是它的初始值0也不在您的预定义范围内.值得庆幸的是,编译器已经在编译时警告过你这个事实.
如果您已设置idx为允许值,然后以编译器无法静态检测的方式将其增加到超出其上限,CONSTRAINT_ERROR则将再次引发(但在编译时不会有任何提示).从技术上讲,此错误是一种例外,您可以像该语言中的任何其他异常一样处理该错误.
注意:我故意链接到上面古老的Ada '83规范,表明这种行为从一开始就是语言的一部分.