【发布时间】:2014-04-22 08:37:57
【问题描述】:
今天我正在对我的队友进行代码审查。它是普通的旧 Delphi,版本 XE4。我检测到这样的代码:
cWin_CountryIdsSet: array[0..243] of integer = (499, 688, 040, ...)
这是十进制 ID 列表,但其中之一 - 040 - 看起来像八进制,对吧?我立即告诉他这个问题,但他回答说:“不,它像小数一样工作,你自己看”。他是对的!我写了一个小例子:
Writeln(080);
if 80 = 080 then Writeln('They are equal');
Writeln(IntToStr(080));
它显示:
80
They are equal
80
所以这意味着这个 Embarcadero 的 explanation about integer constants 目前是不正确的。尤其是这句话是错的:
所有初始为零的常量都被视为八进制。如果八进制常量包含非法数字 8 或 9,则会报告错误。超过 037777777777 的八进制常量将被截断。
我没有收到关于使用数字 8 和编译器忽略前导 0 的任何错误。有人可以解释一下这里的错误以及现在如何在 Delphi 中使用八进制常量吗?
提前谢谢你!
更新: Delphi 不支持八进制常量的显式声明。所以,这是多语言开发的诅咒,我错误地打扰了我的队友。谢谢大家的回答!
【问题讨论】:
标签: delphi delphi-xe4