可以在 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)。
如何修复?
这似乎做你想做的事:
align(1) union Prefix
{
ubyte[9] data;
struct
{
uint fileno;
uint lineno;
char delim;
}
}
static assert(Prefix.sizeof == 9);
把关键字放在align(1)
前面union
就足以让assert通过了,因为里面的数据是自然对齐的,没有间隙。否则,您需要align(1):
在联合/结构的字段之前添加。
可能是一个错误。或者一些晦涩的逻辑,因为命名结构会返回对齐。
编辑:提交了一个错误:http ://d.puremagic.com/issues/show_bug.cgi?id=8566
编辑:沃尔特在那里向我解释了我的错误:)