Есть ли способ создать макрос, который дает максимальный размер списка типов данных?GCC Preproccesor macro для определения максимального размера нескольких структур
Гол
typedef struct {
uint8_t x;
} A;
typedef struct {
uint16_t x;
} B;
typedef struct {
uint8_t x[10];
} C;
#define sizeof_max(A,B,C) //compiles to '10'
Использование
Различных ценностных отображения для общих данных сегмента.
typedef union {
uint8_t array[sizeof_max(A,B,C)];
A iso_hugenum_a;
B ext_a0;
C ext_a1; //and someday down the road 'D' may also get added
} DATA_SEG;
Это для встроенного приложения, где устройство реализует базовый протокол ISO_HUGENUM_A. Устройство также должно поддерживать расширения для этого протокола EXT_A0, EXT_A1, EXT_B0. Черт возьми, в этом случае есть реальный шанс, что EXT_C0 покажется по дороге (yuck)!
Примечания
Основной задачей здесь является для системы верхнего уровня, чтобы знать размер дата-сегмента в расширяемой и безопасным способом. Заманчиво просто сказать 'cast as array', когда вам нужно как массив. Но
На системном уровне (который не дает эфф о протоколе) есть для чтения, записи и проверки (например, КРР) в этом сегменте данных
2yrs вниз по дороге " EXT_C0 'может прийти. Я хочу, чтобы оставить бедную душу, который наследует мой код с чем-то, что не сломается, когда EXT_C0 растет сегмент данных
Я надеюсь, есть решение, но не нашел его еще нет. Есть идеи? Все размеры будут генерироваться препроцессором, поэтому он кажется идеальным кандидатом для макроса.
-Джастин
Почему вы не можете использовать 'sizeof' some' union'-like your 'DATA_SEG' * без *' array'? –
Разве это не обычный случай использования «союза»? –
удален тег C++; спасибо. –