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