2

次のスニペットを含むD2ソースコードは、DMD2.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に等しくなります)。

どうすれば修正できますか?

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だけで、アサートパスを作成できます。これは、キーワード内のデータがギャップなしで自然に整列されるためです。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 に答える