This question already has answers here:
Double hash before parameter in function call
(3 个回答)
8年前关闭。
头文件 cissvar.h 具有以下定义:
所以,
名称指的是“免费”或“通知” “索引”从何而来? 编译器如何在这里进行 .h 和 .c 之间的魔术绑定(bind)?
他们调用您粘贴的那个宏。 “##”运算符将两个代码单词连接成一个单词,因此为第一行生成的代码(带有宏扩展)如下所示:
(3 个回答)
8年前关闭。
头文件 cissvar.h 具有以下定义:
#define CISSQ_REQUEST_QUEUE(name, index) \
static __inline void \
ciss_initq_ ## name (struct ciss_softc *sc) \
{ \
STAILQ_INIT(&sc->ciss_ ## name); \
CISSQ_INIT(sc, index); \
} \
(...)
ciss.c 中的实际用法如下所示:ciss_initq_free(sc);
ciss_initq_notify(sc);
如果有人能解释这是如何工作的,那就太好了。所以,
最佳答案
重要的几行是这些(也在 cissvar.h 中):
CISSQ_REQUEST_QUEUE(free, CISSQ_FREE);
CISSQ_REQUEST_QUEUE(notify, CISSQ_NOTIFY);
他们调用您粘贴的那个宏。 “##”运算符将两个代码单词连接成一个单词,因此为第一行生成的代码(带有宏扩展)如下所示:
static __inline void
ciss_initq_free(struct ciss_softc *sc)
{
STAILQ_INIT(&sc->ciss_free);
CISSQ_INIT(sc, CISSQ_FREE);
}
关于c - 在 C 中使用双哈希 (##),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15885213/
10-10 18:08