Gle*_*234 3 delphi delphi-2006 delphi-3
我有一个程序在Delphi 3中运行正常,我在Turbo Delphi 2006上编译和测试,发现了一个问题.问题是:我使用"基数"数据类型作为某种东西的索引.它在Delphi 3中有效,但我发现Turbo Delphi 2006编译版本的值大于128-256左右,具体取决于具体的数据.将这些数据类型更改为"longint"修复了问题,以便程序与两个编译器一起正常工作.
问题:这是为什么?
我的理解是Cardinal数据类型只是典型的无符号整数数据.这与它们在这个程序中的应用是一致的,特别是通过Delphi 3编译正常工作的事实证明了这一点.那么为什么Turbo Delphi 2006编译不起作用呢?
在Delphi中,无符号类型只是下一个较大的有符号类型的子范围类型.在Delphi 3中,没有64位类型,因此Cardinal没有下一个更大的类型作为子范围.Cardinal是Delphi 3中的签名类型,因为该语言存在技术限制.Delphi 4引入了Int64,而Cardinal被认为是该类型的无符号子范围(然后限制是没有无符号的64位类型).
简而言之,您从未获得真正的无符号行为.现在您已经升级了,您已经暴露了代码中一直存在的长期存在的问题.
您的代码编译不能证明您的代码是正确的.Delphi 3无法实施需要它实际上没有的类型的规则.