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

 
 
 
Reply to this topicStart new topic
> Preprocessing. How to do
Troll
сообщение Oct 19 2012, 11:47
Сообщение #1


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

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Приветствую!

Коллеги помогите пожалуйста с Сишным препроцессором.

Задача. Есть функция void _Func1(...) {}

Для нее делается объявление в хедере.
В зависимости от OS (iOS/Win/Linux) требуется, чтобы имя функции в хедере было _Func1 либо Func1 (), без подчеркивания (это как раз iOS вариант, не спрашивайте нахрена они это сделали sm.gif но иначе не линкуется)

Хочу сделать подстановку этого подчеркивания с помощью препроцессора. пробовал так:
Код
#ifdef IOS
#define OS_PREFIX
#else
#define OS_PREFIX _
#endif

#define __Func1(pref) void  CALL_TYPE ##pref##Func1(...)
__Func1(OS_PREFIX);


Но получается только void CALL_TYPEOS_PREFICFunc1(...)

Подскажите пожалуйста, как заставить этот OS_PREFIX разворачиваться?

Спасибо.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Oct 19 2012, 12:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Всё правильно только нужно макрос вставить в макрос
Код
#define __Func1_dummy(a,pref) void   a##pref##Func1(...)
__Func1(OS_PREFIX);

#define __Func1(pref) void  __Func1_dummy(CALL_TYPE,pref)
__Func1(OS_PREFIX);



Сообщение отредактировал Herz - Oct 19 2012, 12:54
Причина редактирования: Избыточное цитирование


--------------------
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 22 2012, 09:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Код
#ifdef IOS
#define FN(n) n
#else
#define FN(n) _##n
#endif

void  FN(Func1)(...)
FN(Func1)(....);

Так подойдет?
Go to the top of the page
 
+Quote Post
Troll
сообщение Oct 22 2012, 12:03
Сообщение #4


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

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



to XVR:
Прямо то, что надо!!! Спасибо!!! a14.gif

to SyncLair:
Спасибо! Да, так разворачивается, только не подскажите, как вставить пробельные символы? А то после подстановки получается одно большое слово laughing.gif
Код
void_Func1


Это чтобы уже до конца разобраться.



--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post

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

 


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


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