Размерность массива в зависимости от количества директив

lucky_guy
Offline
Зарегистрирован: 17.07.2018

Всем добра!

Подскажите пожалуйста прием для задания размера массива в зависимости от количества констант. Знаю про #ifdef, но не одуплюсь как с его помощью посчитать константы.

Сейчас делаю вот так:

#define pin_dimmer_0 10
#define pin_dimmer_1 11

byte pin_dimmer[2] = {pin_dimmer_0, pin_dimmer_1};
byte dimmer_level[2] = {}; 
byte dimmer_variable[2] = {}; 

но хотелось бы не менять код каждый раз при изменении количества диммируемых выходов.

Спасибо!

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Не задавать размер, пусть компилятор его сам считает

Green
Offline
Зарегистрирован: 01.10.2015

Есть параметры (в виде #define) которые меняются юзером - они могут быть в отдельном файле, а есть программа, которая должна быть неизменна.

#define PIN_DIMMER_0 10                 //принято писать заглавными!
#define PIN_DIMMER_1 11
#define PINS PIN_DIMMER_0, PIN_DIMMER_1

byte pin_dimmer[] = {PINS};
byte dimmer_level[] = {};               //можно так
byte dimmer_variable[sizeof(pin_dimmer)] = {}; //а лучше так

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Никак. Это туда - к Питону.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

вроде как бы ответ #1 самое то! НЕ?

lucky_guy
Offline
Зарегистрирован: 17.07.2018

ua6em пишет:

вроде как бы ответ #1 самое то! НЕ?

Хотел написать библиотеку куда при инициализации передавались бы номера выходов, происходило бы волшебство и дальше передавался бы номер выхода и частота. Видится что-то такое:

#define PIN_DIMMER_0 10
#define PIN_DIMMER_1 11
...
#define PIN_DIMMER_n n+10
//подсчитываем количество директив

for (byte i = 0; i < n; i++) {
...

В противном случае придется редактировать код библиотеки при изменении конфигурации димера.

b707
Offline
Зарегистрирован: 26.05.2017

зря оставили. кусок темы, снесите все.

ТС ярко продемонстрировал свою ненужность на этом форуме. Дело не в словах и не в переводе. Просто человек на достаточно невинную шутку ответил нехилым оскорблением