Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 3310|回复: 5

很有意思,在Delphi编译器的一个错误,到了lazarus则更离谱

[复制链接]

该用户从未签到

发表于 2012-12-2 19:47:12 | 显示全部楼层 |阅读模式
在D编译时能检出到错误:
procedure TForm1.Button1Click(Sender: TObject);
type
   TA = 1 .. 100;
   TB = 1 .. 999;
var
     A:TA;  B:TB;
begin
  A:=100;
  B:=998;
  A:=998; //错误,子界越界,不能赋值 如果换成A:=B     则
               //    Delphi 可以通过编译并得到错误结果230 ;到了 lazarus
               //    不论怎样写都能通过编译并得到同样错误的结果230      
  Label1.Caption:=IntToStr(A);
end;
说明Delphi在语法检查上更为严格。
回复

使用道具 举报

该用户从未签到

发表于 2012-12-7 09:15:53 | 显示全部楼层
标题与描述不符,要是用C,估计又说是BUG一堆。只要是编译器编译出的代码符合你的源代码的规则,就不能说是编译器的错误或BUG。
话说你知道结果为什么是230而不是231不?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-12-11 10:29:58 | 显示全部楼层
A:=B;
只是编译器帮你优化成了
A:=Byte(B);
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-12-11 11:35:59 | 显示全部楼层
常数越界是静态错误; 只要在编译时启用 range checking (用 -Cr 选项), FPC 也会报告错误。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-12-17 13:47:07 | 显示全部楼层
你的测试有什么实际的意义吗?求解
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-1-11 01:59:19 | 显示全部楼层
严谨的人做严谨的事
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 21:32 , Processed in 0.027409 second(s), 10 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表