Клуб DiyAudio

Разное и полезное => Микроконтроллеры и их программирование => Тема начата: lgedmitry от 13 Мая 2014, 12:03:03

Название: можно ли заставить препроцессор посчитать массив констант?
Отправлено: lgedmitry от 13 Мая 2014, 12:03:03
Есть идея организовать массив констант, в котором каждая последующая составляет 75% от предыдущей.
Можно, конечно, всё вручную забить. Но всё ж, хотелось бы для оперативности отладки программы, задавать вручную только первую из них.
Начал писать вот так: unsigned int const merka[16]={65536*0.75,merka[0]*0.75,merka[1]*0.75...}; - не канает, материцца. Можно ли как-нить сделать? ;-[
Название: Re: можно ли заставить препроцессор посчитать массив констант?
Отправлено: xar от 13 Мая 2014, 12:11:01
как вариант - писать программулину, которая сгенерит заготовку. ну или в экселе и копипаст.
Название: Re: можно ли заставить препроцессор посчитать массив констант?
Отправлено: boroda от 13 Мая 2014, 16:16:59
Хм... ЕМНИП, запись в C# константы выглядит так: const unsigned int merka
Название: Re: можно ли заставить препроцессор посчитать массив констант?
Отправлено: xar от 13 Мая 2014, 22:43:51
кстати да. конст не на месте.
Название: Re: можно ли заставить препроцессор посчитать массив констант?
Отправлено: blindman от 14 Мая 2014, 14:03:30
Только такое на ум приходит

#define BASE 65535

#define NEXT_CONST(c) (c * 3 /4)
#define CONST0 BASE
#define CONST1 NEXT_CONST(CONST0)
#define CONST2 NEXT_CONST(CONST1)
#define CONST3 NEXT_CONST(CONST2)
#define CONST4 NEXT_CONST(CONST3)
#define CONST5 NEXT_CONST(CONST4)
#define CONST6 NEXT_CONST(CONST5)
#define CONST7 NEXT_CONST(CONST6)
#define CONST8 NEXT_CONST(CONST7)
#define CONST9 NEXT_CONST(CONST8)
#define CONST10 NEXT_CONST(CONST9)
#define CONST11 NEXT_CONST(CONST10)
#define CONST12 NEXT_CONST(CONST11)
#define CONST13 NEXT_CONST(CONST12)
#define CONST14 NEXT_CONST(CONST13)
#define CONST15 NEXT_CONST(CONST14)

int const unsigned merka[16] = {
    CONST0, CONST1, CONST2, CONST3,
    CONST4, CONST5, CONST6, CONST7,
    CONST8, CONST9, CONST10, CONST11,
    CONST12, CONST13, CONST14, CONST15,
};


Порядок модификаторов в C не имеет значения (в отличии от, например, языка Java)

const int unsigned i = 1;
unsigned int const i = 1;
int const unsigned i = 1;
int unsigned const i = 1;
const unsigned int i = 1;
unsigned const int i = 1;
Название: Re: можно ли заставить препроцессор посчитать массив констант?
Отправлено: lgedmitry от 15 Мая 2014, 05:49:57
blindman, Андрей, спасибо, на днях попробую. Что-то времени маловато опять стало ???
Порядок модификаторов в C не имеет значения (в отличии от, например, языка Java)
А то я думаю, на порядок у меня никак не материлось ???