为什么整数表达式的值超过特定整数类型的取值范围时没有引发 ERangeError 异常

wyl918 2010-10-20 10:55:30
当一个整数表达式的值超过为一个特定整数类型分配的范围时引发 ERangeError 异常。
比如下面一段代码应该会引发一个 ERangeError 异常,但是实际测试结果并没有捕获到异常,代码如下:
procedure TForm1.btnCatch2Click(Sender: TObject);
var
SmallNumber:ShortInt;
X,Y:Integer;
begin
try
X:=100;
Y:=75;
SmallNumber := X + Y;
ShowMessage(IntToStr(SmallNumber));
except
on ERangeError do
ShowMessage('Error');
end;
end;

预计显示结果:弹出Error信息提示框
实际显示结果:-81
...全文
69 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyl918 2010-10-20
  • 打赏
  • 举报
回复
问题解决:
ERangeError 异常只有当范围检查打开时才会引发,可以在代码中包含{$R+}编译指示或设置 IDE Option|Project 的 Range_Checking Option 选择框。
Versus1008 2010-10-20
  • 打赏
  • 举报
回复
数据溢出……

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧