注册 登录
编程论坛 Delphi论坛

[求助]pascal中子界类型问题

clangxing 发布于 2007-01-14 20:06, 1731 次点击

最近在学习pascal ,看到子界章篇。测试了个程序,有点疑问。
测试程序:
program p16;
type a=1..10;
var t:a;
begin
readln(t);
writeln('t=',t);
end.
程序运后我输入20,输出为t=20;
我的疑问是:20超出1..10的界限了,为什么不会报错?

6 回复
#2
xu20002007-01-14 22:42
Delphi的编译默认的情况下是不作边界检查的。听说有办法能让它做边界检查。但我不知道。如果你查到麻烦告诉我一声。
#3
clangxing2007-01-18 21:08

但是在下面这个测试程序中它会判断界限的问题:

program p17;
type a=1..10;
var b:a;
begin
b:=20;
end.

编译时,出现错误提示:Error 76:constant out of range.


#4
volte2007-01-19 15:07

子界多是用在静态的程序越界中。
对于静态的程序越界,是可以判断的。

对于动态的,Delphi是按照基本类型越界来判断的。而不是按照子界类型来判断的!

#5
yeye552007-01-19 17:16
编译器会检查代码中不合理的地方,但在实际运行中的动态错误可就没人管了。
#6
clangxing2007-01-20 10:38
谢谢各位指点 ,现在有点明白了。
#7
jack_lvzheng2008-05-10 17:52
你的电脑有问题
1