[С++ macros нуб] как вставить значения макроса

Ventalf

Обявляю вот такой макро
#define PyInitFunctionName(dll_name) init_module_##dll_name
затем
#define MyLibName my_solaris64_lib
далее
void PyInitFunctionName(MyLibName; // поправил - добавил скобки
Проблема в том что в таком случае передается название MyLibName.
Мне нужно чтоб передавалось значение.
Требуемый результат операции
void init_module_my_solaris64_lib;
вместо
void_module_MyLibName;
Как это сделать?
Спасибо

salamander

Нужен еще один макрос. Вот так.
#define glue(x, y) x ## y
#define PyInitFunctionName(dll_name) glue(init_module_, dll_name)
#define MyLibName my_solaris64_lib

void PyInitFunctionName(MyLibName;

Ventalf

Спасибо!
Остается понять что произошло и как этот еще один макрос поменял ситуацию

salamander

При раскрытии макроса аргументы операторов # и ## не макроэкспандятся. Чтобы обмануть это свойство нужен второй макрос, чтобы их замакроэкспандить заранее, до передачи в ##. Как-то так.
Следующий вариант тоже работает:
#define PyInitFunctionName_2(dll_name) init_module_##dll_name
#define PyInitFunctionName(dll_name) PyInitFunctionName_2(dll_name)
#define MyLibName my_solaris64_lib

void PyInitFunctionName(MyLibName;
Оставить комментарий
Имя или ник:
Комментарий: