Рассмотрим следующее общее определение массива, обратите внимание, что сам массив должен включать в себя общий размер:
#define BUFSZ 3
uint8_t buffer[BUFSZ] = {
BUFSZ, 0xFF, 0x00
}
Это не очень удобно, когда вы меняете буфер много, и он становится достаточно большим, чтобы отслеживать каждое изменение легче, чем считать с нуля каждый раз. Конечно, что-то вроде этого возможно:
#define BUFSZ 3
uint8_t buffer[BUFSZ] = {
sizeof(buffer), 0xFF, 0x00
}
или наоборот
#define BUFSZ 3
uint8_t buffer[] = {
BUFSZ, 0xFF, 0x00
}
Но комбинация двух бродящих без подсчета вообще невозможна:
uint8_t buffer[] = {
sizeof(buffer), 0xFF, 0x00
}
, что приводит к
invalid application of 'sizeof' to incomplete type 'uint8_t[]' {aka 'unsigned char[]'}
Примечание. Я использую компилятор arm-none-eabi-g cc, но это также относится и к g cc.
Какова наилучшая практика для ситуации, когда вам нужно определить массив во время компиляции, который должен хранить его размер?
Полагаю, можно было бы зарезервировать это место и установить его во время выполнения, что в моем случае могло бы сработать, но также могло бы предотвратить его сохранение в постоянной памяти.