我有这样的情况,我有很多生成的函数,并希望将它们指向我创建的一些通用函数(以便在生成的函数名称更改时重用基础代码)。
本质上,我有一个函数名称列表,如下所示:
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)
之间的##不正确。##是通过连接多个标记来创建单个标记的。开括号不能(也不应该!)成为将成为函数名称的标记的一部分。 - CB Bailey