如何在DMD 2.060下修复此联合大小/对齐要求

时间:2012-08-15 12:12:22

标签: d dmd

包含以下代码段的D2源代码可以在DMD 2.059下编译

union Prefix {
  char[9] data;
  align(1) struct { uint fileno; uint lineno; char delim; };
}
static assert(Prefix.sizeof == 9);

并且很遗憾在DMD 2.060下失败(Prefix.sizeof等于12)。

如何解决?

3 个答案:

答案 0 :(得分:3)

这似乎可以做你想要的:

align(1) union Prefix
{
    ubyte[9] data;

    struct
    {
        uint fileno;
        uint lineno;
        char delim;
    }
}

static assert(Prefix.sizeof == 9);

答案 1 :(得分:1)

align(1)关键字之前放置union足以使断言通过,因为其中的数据自然对齐而没有间隙。否则,您需要在union的/ struct的字段之前添加align(1):

答案 2 :(得分:0)

可能是一个错误。或者一些模糊的逻辑,因为命名一个结构会返回对齐。

编辑: 提起了一个错误:http://d.puremagic.com/issues/show_bug.cgi?id=8566

编辑: 沃尔特在那里解释了我的错误:)