реклама на сайте
подробности

 
 
> Подсчитать количество объявлений, препроцессор C
kurtis
сообщение May 28 2008, 16:59
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Есть макрос который, описует конструктор класса
Код
#define UART0_SET(_func_name, _net_in, ........) \
        FunctionDesc _func_name( (uint8_t)_net_in, \
                                .........
                                    );                \


Таких объявлений несколько (около 10 штук) но их количество со временем меняется. Далее в программе есть цикл, где с этими классами в цикле что-то делается, но для того чтоб с ними делалось что-то хорошее, нужно каждый раз задавать ручками количество объявлений, а этот процес хочется как-то автоматизировать....

Вообщем, как проще всего автоматизировать подсчет количества элементов???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
dxp
сообщение May 29 2008, 06:25
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(kurtis @ May 28 2008, 23:59) *
Есть макрос который, описует конструктор класса
Код
#define UART0_SET(_func_name, _net_in, ........) \
        FunctionDesc _func_name( (uint8_t)_net_in, \
                                .........
                                    );                \

Можно узнать, зачем конструктор класса описывать с помощью макроса?

Цитата(kurtis @ May 28 2008, 23:59) *
Таких объявлений несколько (около 10 штук) но их количество со временем меняется. Далее в программе есть цикл, где с этими классами в цикле что-то делается, но для того чтоб с ними делалось что-то хорошее, нужно каждый раз задавать ручками количество объявлений, а этот процес хочется как-то автоматизировать....

Вообщем, как проще всего автоматизировать подсчет количества элементов???

В цикле обрабатываются объекты одного и того же класса или разных? Если одного и того же, то нельзя ли объявить массив объектов?

Насчет универсального решения, боюсь, что штатными средствами препроцессора тут сделать вряд ли удастся - ту же раздельную компиляцию препроцессор не преодолеет. Может, переформулировать вопрос, чтобы понятнее было, что вообще надо-то получить в конечном итоге? Может тогда найдутся альтернативные решения.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
kurtis
сообщение May 29 2008, 12:36
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Цитата(dxp @ May 29 2008, 09:25) *
Можно узнать, зачем конструктор класса описывать с помощью макроса?

мне так удобней, никакого особого смысла тут нету...

Цитата(dxp @ May 29 2008, 09:25) *
В цикле обрабатываются объекты одного и того же класса или разных? Если одного и того же, то нельзя ли объявить массив объектов?

Одного. Можно=)
Но проблема в том что я незнаю как сказать компилятору сколько у меня обьектов не указывая явно это число

есть 2 макроса, создающих обьекты

Код
UART0_SET(Func1, 0x51, 0x51, 'd', data_from_term, data_for_term)
UART0_SET(Func2, 0x52, 0x52, 'd', data_from_term1, data_for_term1)


есть массив обьектов

Код
FunctionDesc* pUSART0_info[NUM_OF_DEFS] =
{
    &Func1,
    &Func2
};


далее где-то в программе

Код
    for(i=0;i<NUM_OF_DEFS;i++) {    
        pUSART0_info[i]->drv();
        pUSART0_info[i]->show_mnem();

и тд....

так вот я именно незнаю как компилятору сказать значение NUM_OF_DEFS , не указывая его явно!!!такое нужно т.к. иногда добавляя (удаляя) обьекты, забываю изменить значение этой константы, и программа начинает вести себя самым неприличным образом!!!

Думал сделать что-то вроде
Код
#define NUM_OF_DEFS 0

.............

#ifdef NUM_OF_DEFS
#define NUM_OF_DEFS NUM_OF_DEFS+1
#endif

и вставить это куда-то в макрос, но компилятор не хочет переваривать такую конструкцию...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 29 2008, 12:41
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(kurtis @ May 29 2008, 15:36) *
А если
Код
FunctionDesc* pUSART0_info[] =
{
    &Func1,
    &Func2
};
далее где-то в программе
Код
    for(i=0; i< sizeof(pUSART0_info) / sizeof(pUSART0_info[0]);i++) {    
        pUSART0_info[i]->drv();
        pUSART0_info[i]->show_mnem();


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
kurtis
сообщение May 29 2008, 13:13
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Да!!!То что нужно, спасибо=)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016