У меня есть массив, который используется в коммуникационном протоколе (дескриптор устройства USB). Этот протокол вызывает размер массива в заголовке массива. Так что я хотел бы сделать это (что запрещено):как разместить размер массива внутри самого инициализатора массива в C?
static uint8_t array[]= {
TYPE,
sizeof(array),
other data...
};
Массив, находясь в только для чтения части памяти, я не могу переопределить соответствующую ячейку после факта, и я не очень желая скопировать его, чтобы переопределить ячейку (она находится в минимальной встроенной системе). Мне нужно, чтобы он выглядел как «на проводе», потому что он пройдет через DMA.
Есть ли какая-то магия, которая могла бы обойти это ограничение? Я готов использовать расширения C99 или GNU. Я не буду переключаться только на это, но мне также интересно, как на C++-решение.
и указать размер массива в объявлении, например, поскольку 'static uint8_t array [18] = ...', по-видимому, не является более полезным решением, чем «почему бы вам просто не набирать размер массива вручную, а не использовать sizeof»? – Tommy
«Массив, находящийся в части памяти только для чтения» Этого не может быть, если вы не опустили 'const'. –
@ danielFischer хороший улов, спасибо. Но с или без «const» этот материал заканчивается в заблокированной части карты памяти. – nraynaud