У меня проблема с проверкой структуры - во время компиляции - если она хорошо выровнена или содержит пробелы. Проверка может быть выполнена в дополнительном тестовом коде, но я не хочу, чтобы «упакованные» данные были в реальном коде реализации.Проверьте на C++, что структура хорошо выровнена или содержит пробелы
Это пример файл заголовок (MyData.h) с типичным включает охрану:
#ifndef MYDATA_H_
#define MYDATA_H_
struct uneven
{
int bla_u32;
short bla_u16;
char bla_u8;
/* <-- this gap will be filled in the unpacked version */
};
#endif // MYDATA_H
я нашел одно из возможных решений - см ниже.
Вопросы:
Есть элегантный способ проверить, если структура
uneven
содержит разное количество байт по сравнению с его коллегой распакованной в время компиляции?Возможно ли решение, которое будет работать в C (без использования пространства имен)?
Что вы имеете в виду с проверкой, может быть сделано в дополнительном тестовом коде? Вы хотите иметь контроль над размещением утверждения в своем коде? В противном случае вы можете просто определить функцию (аналогичную предложенной @Dutow) в сочетании с вашей реализацией static assert для каждой новой структуры, которую вы хотите проверить временем компиляции. – jcxz
«проверка может быть выполнена в дополнительном тестовом коде» означает, что проверка (также static assert) может быть выполнена в дополнительных файлах c или cpp, которые не являются частью выпущенной базы кода или фактического продукта (например, с использованием дополнительных флагов компилятора или что-то, что не должно быть частью фактического выпуска) –