为什么int x = 08; 当int x = 078时有效; 在`DMD`中无效?

5 d literals dmd

我最近在研究D编程语言中的文字细节.

由于八进制文字使用0的前缀,数字,int x = 078;是无效的自然.但那么为什么int x = 08;DMD中有效呢?

但是,我已经用GCC(C编译器)对它进行了测试,发现它们都是无效的.

import std.stdio;

int main(string[] args)
{
    // int x = 078; // error here: radix 8 digit expected, not '8'
    int x = 08; // but no error here
    writeln("x = ", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是DMD中的错误吗?提前致谢.

NB我正在使用DMD32 D Compiler v2.071.2-b2(Win32版本).

小智 3

D 中不推荐使用八进制文字,如果使用的话应该会出错。dmd接受的事实08表明存在错误。如果您确实想使用八进制,请使用模板std.conv.octal

void main()
{
    import std.conv : octal;
    //int a = octal!8; //Error
    int b = octal!7; //Fine
}
Run Code Online (Sandbox Code Playgroud)

  • 如果它不在 Bugzilla 上,它就不可能是一个错误!我很快[填充](https://issues.dlang.org/show_bug.cgi?id=16396)它。 (2认同)