Дополните структуру C ++ степенью двойки
Я работаю над кодом C ++ для встроенной системы. Интерфейс ввода / вывода, который использует код, требует, чтобы размер каждого сообщения (в байтах) был степенью двойки. Прямо сейчас код делает что-то вроде этого (в нескольких местах):
#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()
Я впервые пытаюсь скомпилировать код на 64-битной Fedora, гдеlong
является 64-битным. В этом случае,sizeof(internal_)
больше чем 64, выражение размера массива теряет значение, и компилятор жалуется, что массив слишком велик.
В идеале я хотел бы иметь возможность написать макрос, который будет принимать размер структуры и оценивать во время компиляции требуемый размер массива заполнения, чтобы округлить размер структуры до степени двойки.
Я посмотрел наБит Тиддлинг Хаки страницы, но я не знаю, может ли какой-либо из методов там действительно быть реализован в макросе, который будет оцениваться во время компиляции.
Любые другие решения этой проблемы? Или я должен увековечить проблему и просто изменить магические 64 на магические 128?