Вы не можете напрямую протестировать упаковку структуры, вместо этого вам нужно создать тестовую структуру и проверить ее размер:
struct Test_Pack_Struct {
unsigned char bVal;
__int64 lVal;
};
#define GetStructPacking() (sizeof(Test_Pack_Struct)-8)
Во время компиляции вы можете проверить размер устройства со статическим утверждением (требуется C ++ 11или выше), например:
static_assert( GetStructPacking() == 4, "Error: 4 byte packing assumed" );
Во время выполнения вы можете присвоить значение макроса GetStructPacking переменной или использовать его в выражениях:
int iPacking = GetStructPacking()
Имейте в виду, чторазмер структуры Test_Pack_Struct зависит от позиции, в которой она определена (заголовки, файлы кода и т. д.).
Недостатком является то, что если вы хотите выполнить несколько проверок упаковки в одном и том же контексте, вам необходимо определить различные структуры (и макросы, если вы хотите их использовать).