-
- Возьми смещения членов штатно, с помощью offsetof(). И сравни
разности между соседними смещениями с sizeof(члена), а сумму
offsetof(члена) и sizeof(типа) последнего члена структуры с
размером структуры. Если совпало - значит упаковано верно. Правда,
как закатать это в макрос препроцессора - я ХЗ. - Nikolay_Po(26.04.2023 14:01)
- Я уже победил, вот так отлично работает #define PROVERKA(var)
typedef struct {int var##TmpVar : !((offsetof(IntEEPROM_t,
var))%sizeof((((IntEEPROM_t*)0)->var)));} TmpVar##var;. Просто
непонятки с __INTADDR__, хочу все знать - IBAH(26.04.2023 14:04)
- Спасибо. Интересно. Как я понял, проверяется выравнивание положения каждого члена структуры (или вообще, любой переменной) по размеру её типа. Верно? Макрос, правда, получился для конкретного типа струткуры, IntEEPROM_t. Можно сделать универсальный, для любых типов структур? Nikolay_Po(305 знак., 28.04.2023 09:44)
- Я уже победил, вот так отлично работает #define PROVERKA(var)
typedef struct {int var##TmpVar : !((offsetof(IntEEPROM_t,
var))%sizeof((((IntEEPROM_t*)0)->var)));} TmpVar##var;. Просто
непонятки с __INTADDR__, хочу все знать - IBAH(26.04.2023 14:04)
- Возьми смещения членов штатно, с помощью offsetof(). И сравни
разности между соседними смещениями с sizeof(члена), а сумму
offsetof(члена) и sizeof(типа) последнего члена структуры с
размером структуры. Если совпало - значит упаковано верно. Правда,
как закатать это в макрос препроцессора - я ХЗ. - Nikolay_Po(26.04.2023 14:01)