Я бы сделал так (это идея, пишу набело, поэтому могут быть ошибки): #define UINT24_DECLARE(name, ...) __VA_ARGS__ uint16_t lo16_##name; __VA_ARGS__ uint8_t hi8_##name
#define UINT24_SET(name, value) do { uint32_t d = value; lo16_##name = d; hi8_##name = d >> 16; } while(0)
#define UINT24_GET(name) (((uint32_t)hi8_##name << 16) | lo16_##name)
UINT24_DECLARE(array[200], const);
main()
{
int i = 0;
do { UINT24_SET(array[i], i); } while(++i != 200);
}