Beim Durchsuchen der DMD-Quelle sieht es so aus, als ob alignof
align
Attribute nicht berücksichtigt.
Hier ist, wo es behandelt wird:
... if (ident == Id::__xalignof)
{
e = new IntegerExp(loc, alignsize(), Type::tsize_t);
}
Dieser wandelt ein .alignof
Ausdruck in einen size_t
Ausdruck mit dem Wert alignsize()
, also lassen Sie uns für eine statische Array bei alignsize()
aussehen:
unsigned TypeSArray::alignsize()
{
return next->alignsize();
}
Es ist einfach bekommt in Ihrem Fall die Ausrichtung des Elementtyps (void
).
void
von TypeBasic::alignsize()
behandelt wird, die gerade nach vorne zu TypeBasic::size(0)
switch (ty)
{
...
case Tvoid:
size = 1;
break;
...
}
Betrachtet man, wie andere Arten behandeln alignof
, es sieht nicht so aus align
Attributen überhaupt berücksichtigt werden, aber ich könnte falsch sein . Es kann sich lohnen, die Ausrichtung manuell zu testen.
lol warte so was tut 'align' tun? Ist es nur zur Dekoration da? xD – Mehrdad
Ich denke, 'align' funktioniert, aber 'alignof' bekommt nur die Ausrichtung des Typs, so dass sie getrennte Dinge sind. –
Komisch, ich stieß auf Probleme, die dazu führten, dass ich "alignof" überprüfe ... muss aber nochmal nachsehen .. – Mehrdad