了解C和预处理程序指令中的宏

时间:2018-09-30 11:59:32

标签: c c-preprocessor

我不理解这些宏,它是如何工作的?还有irc _ ## name是什么?..我从insobot IRC bot得到了这段代码,代码为https://github.com/baines/insobot/blob/master/src/insobot.c

#define IRC_CALLBACK_BASE(name, event_type) static void irc_##name ( \
irc_session_t* session, \
event_type     event,   \
const char*    origin,  \
const char**   params,  \
unsigned int   count    \
)

#define IRC_STR_CALLBACK(name) IRC_CALLBACK_BASE(name, const char*)
#define IRC_NUM_CALLBACK(name) IRC_CALLBACK_BASE(name, unsigned int)

1 个答案:

答案 0 :(得分:1)

##是令牌连接运算符:在这些宏定义中使用它,通过在宏{的第一个参数的值之前加irc_来创建回调函数名称的标识符{1}}和/或IRC_STR_CALLBACK

在第183行查看此宏调用:

IRC_NUM_CALLBACK

此源代码行扩展为

IRC_STR_CALLBACK(on_join);

该宏用于以一致的方式声明处理程序,而无需显式地编写原型,这很方便,因为此源文件中有许多处理程序。

相关问题