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

 
 
 
Reply to this topicStart new topic
> препроцессор Keil'а, как бы так извратиться, чтобы было красиво
abcdefg
сообщение Jun 6 2006, 13:26
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 23-01-06
Из: Msk
Пользователь №: 13 490



есть набор функций с именами по шаблоны func_N (N-целое)
для хорошей читаемости и быстрой коррекции написал макрос типа:

#define Func(DevNum) func_##DevNum(), который при подстановке цифр преобразует к виду func_1, func_2 и т.д.
Всё хорошо, пока в параметр не подставляется еще один макрос, например:

#define EXT_DEVICE 1
.............
int main()
{

Func(EXT_DEVICE);
}

препроцессор преобразует строку в func_EXT_DEVICE, на что и ругается компилятор.

Как сделать такой макрос, который по параметру вызывал бы нужную функцию?
Go to the top of the page
 
+Quote Post
Dimchansky
сообщение Jun 6 2006, 13:37
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685



Цитата(abcdefg @ Jun 6 2006, 14:26) *
Всё хорошо, пока в параметр не подставляется еще один макрос, например:

#define EXT_DEVICE 1
.............
int main()
{

Func(EXT_DEVICE);
}

препроцессор преобразует строку в func_EXT_DEVICE, на что и ругается компилятор.

Как сделать такой макрос, который по параметру вызывал бы нужную функцию?

#define EXT_DEVICE (1)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 6 2006, 13:53
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dimchansky @ Jun 6 2006, 16:37) *
#define EXT_DEVICE (1)

:-) Там ЯВНАЯ операция со СТРОКАМИ, посему с дефинициями EXT_DEVICE можно не пытаться извращаться.

Можно так:

#define EXT_DEVICE 1
#define Func(DevNum) X_Func(DevNum)
#define X_Func(DevNum) Func_##DevNum()


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
abcdefg
сообщение Jun 6 2006, 15:13
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 23-01-06
Из: Msk
Пользователь №: 13 490



Цитата(zltigo @ Jun 6 2006, 17:53) *
Можно так:

#define EXT_DEVICE 1
#define Func(DevNum) X_Func(DevNum)
#define X_Func(DevNum) Func_##DevNum()



Заработало!!! спасибо!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 02:35
Рейтинг@Mail.ru


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