Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Preprocessing. How to do
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Troll
Приветствую!

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

Задача. Есть функция 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 разворачиваться?

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

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

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

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

Так подойдет?
Troll
to XVR:
Прямо то, что надо!!! Спасибо!!! a14.gif

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


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

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.