Navigando fonte DMD, sembra che alignof
non tiene conto align
attributi.
Qui è dove viene gestita:
... if (ident == Id::__xalignof)
{
e = new IntegerExp(loc, alignsize(), Type::tsize_t);
}
Questo trasforma un'espressione .alignof
in un size_t
un'espressione con un valore alignsize()
, quindi diamo un'occhiata a alignsize()
per una matrice statica:
unsigned TypeSArray::alignsize()
{
return next->alignsize();
}
E 'solo ottiene l'allineamento del tipo di elemento (void
) nel tuo caso.
void
è gestita da TypeBasic::alignsize()
, che solo in avanti per TypeBasic::size(0)
switch (ty)
{
...
case Tvoid:
size = 1;
break;
...
}
Guardando a come gestire altri tipi alignof
, esso non sembra align
attributi sono presi in considerazione a tutti, ma potrei sbagliarmi . Può valere la pena testare manualmente l'allineamento.
fonte
2012-05-19 11:49:08
lol attendi quindi cosa fa "allineare"? E 'solo lì per la decorazione? xD – Mehrdad
Penso che 'align' funzioni, ma' alignof' ottiene solo l'allineamento del tipo, quindi sono cose separate. –
Strano, mi sono imbattuto in problemi che mi hanno portato a controllare 'alignof' ... devo ricontrollare se .. – Mehrdad