Podkładaj strukturę C ++ do potęgi dwóch
Pracuję nad kodem C ++ dla systemu wbudowanego. Interfejs I / O, którego używa kod, wymaga, aby rozmiar każdej wiadomości (w bajtach) był potęgą dwóch. W tej chwili kod robi coś takiego (w kilku miejscach):
#pragma pack(1)
struct Message
{
struct internal_
{
unsigned long member1;
unsigned long member2;
unsigned long member3;
/* more members */
} internal;
char pad[64-sizeof(internal_)];
};
#pragma pack()
Próbuję skompilować kod w 64-bitowej Fedorze po raz pierwszy, gdzielong
ma 64 bity. W tym przypadku,sizeof(internal_)
jest większy niż 64, wyrażenie w rozmiarze tablicy jest niedomiarowe, a kompilator skarży się, że tablica jest zbyt duża.
W idealnej sytuacji chciałbym móc napisać makro, które zajmie rozmiar struktury i oszacuje w czasie kompilacji wymagany rozmiar tablicy dopełnienia, aby zaokrąglić rozmiar struktury do potęgi dwóch.
Spojrzałem naTrochę dziwacznych hacków strona, ale nie wiem, czy któraś z tych technik może być zaimplementowana w makrze do oceny w czasie kompilacji.
Jakieś inne rozwiązania tego problemu? Czy powinienem utrwalić problem i po prostu zmienić magiczną 64 na magiczną 128?