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

 
 
> Preprocessor & оператор "##", Как сложить оператор из букв ?
AndryG
сообщение Dec 25 2009, 15:23
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Доброго.
Есть кусок (подсмотрел оператор ## в коде у народа) кода
Код
#define STX_PORT_NAME       B
#define STX_PIN             3

#define STX_CONCAT(a,b)     a ## b
#define STX_GEN_PORT(name)  STX_CONCAT(PORT,name)
#define STX_GEN_DDR(name)   STX_CONCAT(DDR ,name)
#define STX_PORT            STX_GEN_PORT(STX_PORT_NAME)
#define STX_DDR             STX_GEN_DDR (STX_PORT_NAME)

#define stx_init()          {STX_PORT |= (1<<STX_PIN);\
                              STX_DDR  |= (1<<STX_PIN);}
Всё компилится.
Но хочется избавится от макросов STX_GEN_x и STX_CONCATE
Код
#define STX_PORT  PORT ## STX_PORT_NAME
   превращается
Error[Pe020]: identifier "PORTSTX_PORT_NAME" is undefined D:\step_f\step_f.c 58


Откройте секрет, пжлст, как оператору ## толком указать, где "значение", а где "переменная", значение которой надо вставить.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Dec 25 2009, 15:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(AndryG @ Dec 25 2009, 18:23) *
Откройте секрет, пжлст, как оператору ## толком указать, где "значение", а где "переменная", значение которой надо вставить.
С помощью макросов, от которых Вы желаете избавиться, "значения" "переменных" передаются оператору ##
Go to the top of the page
 
+Quote Post



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

 


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


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