【发布时间】:2010-11-18 05:51:11
【问题描述】:
我有很多生成函数的情况,并希望将它们指向我创建的一些通用函数(以允许我在生成的函数名称更改时重用基本代码)。
基本上,我有一个函数名称列表如下:
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)
有什么好的办法吗?
【问题讨论】:
-
不应该是#define FUNCTION_NAME(funcName) void funcName(void)吗?
-
抱歉,为了更清楚而进行了编辑...我遗漏了一个重要部分,即函数名称的另一部分要放入其中...
-
请注意
signal和(void)之间的## 不正确。 ## 用于通过连接多个标记来创建单个标记。左括号不能(也不应该!)将成为函数名称的标记的一部分。
标签: c macros c-preprocessor