八进制常量像十进制常量一样工作

今天我正在对我的队友进行代码审查。 这是普通的旧版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对整数常量的解释目前是不正确的。 特别是这句话是错误的:

所有具有初始零的常量都取八进制。 如果八进制常数包含非法数字8或9,则会报告错误。 八进制常量超过037777777777被截断。

我没有得到关于使用数字8和编译器忽略前导0的任何错误。有人可以解释我请谁在这里错了,以及如何在Delphi中使用八进制常量?

先谢谢您!

更新: Delphi不支持显式声明八进制常量。 所以,这是多语言开发的祸根,我错误地扰乱了我的队友。 谢谢你所有的答案!


你链接到的是C ++引用,而不是Delphi引用。 Delphi不支持八进制文字,只有十进制和十六进制文字。


Delphi文字可以是十进制或十六进制。 没有任何其他代表的支持。

你提到的文档是C ++而不是Delphi。

链接地址: http://www.djcxy.com/p/91057.html

上一篇: Octal constant is working like decimal constant

下一篇: How to detect Stream encoding?