У меня есть макрос повторить макрос, который я использую, чтобы заполнить массивы со значениями по умолчанию во время компиляции:C макроподстановка заказ
const int array [512] =
{
MACRO_REPEAT(512, -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
Макроса повтора будет расширяться MACRO_REPEAT_512, но теперь я хотел бы использовать другие макросы как размер массива, как:
#define ARRAY_LENGTH 512
const int array [ARRAY_LENGTH ] =
{
MACRO_REPEAT(ARRAY_LENGTH , -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
Но это расширяющееся к MACRO_REPEAT_ARRAY_LENGTH, не расширяет ARRAY_LENGTH
значения до конкатенации его. Другой пример будет для многомерных массивов, что предполагает более уровней расширения:
#define X 512
#define Y 512
const int array [X][Y] =
{
MACRO_REPEAT(X*Y , -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
Это будет расширяться MARO_REPEAT_X * Y. Итак, есть ли способ расширить эти значения до конечного числового значения, прежде чем конкатенировать его с другими макросами?
Почему бы просто не использовать цикл или 'memset()'? Да, они работают во время выполнения, но достигают желаемого эффекта относительно легко. – Peter
GCC имеет расширение, которое позволяет инициализировать диапазон элементов с тем же значением, что-то вроде 'int array [ARRAY_LENGTH] = {[0 ... 3] = -2, [4] = 10, [5] = 2, [6 ... ARRAY_LENGTH - 1] = -2,}; ' –
@Peter Я знаю это, но я работаю во встроенной системе, и я хотел бы сохранить его во flash (обновленный вопрос с помощью определителя константы) – rnunes