Дополните структуру 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?

Ответы на вопрос(11)

Ваш ответ на вопрос