У меня есть ситуация, когда у меня есть довольно много сгенерированных функций, и я хотел бы указать им на некоторые общие функции, которые я создал (чтобы я мог повторно использовать базовый код при изменении сгенерированных имен функций).
По сути, у меня есть следующий список имён функций:
void Callback_SignalName1(void);
void Callback_SignalName2(void);
...etc
Как только они будут сгенерированы, я хотел бы определить макрос, чтобы их можно было вызывать в общем виде. Моя идея заключалась в следующем, но мне не удалось реализовать ее ... поскольку препроцессор C принимает имя макроса, а не то, что макрос определен как:
#define SIGNAL1 SignalName1
#define SIGNAL2 SignalName2
#define FUNCTION_NAME(signal) (void Callback_ ## signal ## (void))
...
...
FUNCTION_NAME(SIGNAL1)
{
..
return;
}
Проблема в том, что я получаю
void Callback_SIGNAL1(void)
вместо
void Callback_SignalName1(void)
Есть ли хороший способ обойти это?
signal
и(void)
неверно. ## предназначен для создания одного токена путем объединения нескольких токенов. Открывающая скобка не может быть (и не должна быть!) Частью токена, который будет именем функции. - person CB Bailey   schedule 10.08.2009