[英]Is it possible for C preprocessor macros to contain preprocessor directives?
[英]understanding Macros in C and preprocessor directives
我不明白那些宏,它是如何工作的?還有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)
##
是令牌串聯運算符:在這些宏定義中使用它,通過在宏IRC_STR_CALLBACK
和/或IRC_NUM_CALLBACK
的第一個參數的值之前添加irc_
來創建回調函數名稱的標識符
查看第183行的宏調用:
IRC_STR_CALLBACK(on_join);
該源代碼行擴展為
static void irc_on_join ( irc_session_t* session, event_type event, const char* origin, const char** params, unsigned int count );
該宏用於以一致的方式聲明處理程序,而無需顯式地編寫原型,這很方便,因為此源文件中有許多處理程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.