2

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

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)。

如何修复?

4

3 回答 3

3

这似乎做你想做的事:

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

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

static assert(Prefix.sizeof == 9);
于 2012-08-20T12:37:58.607 回答
1

把关键字放在align(1)前面union就足以让assert通过了,因为里面的数据是自然对齐的,没有间隙。否则,您需要align(1):在联合/结构的字段之前添加。

于 2012-08-20T12:36:46.720 回答
0

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

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

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

于 2012-08-17T18:56:11.647 回答