Цитата
Тяжелое ассемблерное детство...
Union будет иметь размер максимального своего поля, потому это равносильно выделению куска памяти хватающего на все и обращению к нему как к разному типу переменных.
я не говорил что это изящное решение, а просто пытался продемонстрировать как бы физический смысл происходящего.
А вопросы выравниваний и прочего возьмет на себя компилятор, как и в случае union.
Цитата
Почему именно так? Чем это лучше варианта с union
по мне как раз
Цитата
загаживание исходников явными приведениями
которое здорово дисциплинирует и лишний раз подтверждает что вы знаете к какому типу вы обращаетесь....
Цитата
А если надо хранить uint64_t, когда указатель на void занимает 32 бита?
ну так он указатель на данные, а не данные. Они должны лежать отдельно и правильно оформленными, ИМХО... но это вопрос архитектуры, для абстрактных задач часто можно подобрать пример, когда любая идея становиться злой утопией и наоборот....
Цитата
Объявление переменной:
#define MAX_EVENTS 54
static flexType(MAX_EVENTS) x;
хоть убейте не понимаю я разницы с объявлением
Код
typdef int8_t Array1Type; // это в отдельном заголовке
Array1Type x; // это в коде
меняется также в 1 месте, там где вы бы
54 заменили на 1000, смените
typdef int8_t Array1Type
на
typdef int16_t Array1Type.
только вы сохраните работающей функцию sizeof(Array1Type) в отличии от sizeof( flexType(MAX_EVENTS) );