har*_*ari 4 c compiler-construction macros
头文件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);
}
Run Code Online (Sandbox Code Playgroud)
ciss.c中的实际用法如下所示:
ciss_initq_free(sc);
ciss_initq_notify(sc);
Run Code Online (Sandbox Code Playgroud)
如果有人可以解释这是如何工作的话会很棒.
那么,
1)name指的是"free"或"notify"
2)"index"来自哪里?3)编译器如何在.h和.c之间进行魔术绑定?
重要的是这些(也在cissvar.h中):
CISSQ_REQUEST_QUEUE(free, CISSQ_FREE);
CISSQ_REQUEST_QUEUE(notify, CISSQ_NOTIFY);
Run Code Online (Sandbox Code Playgroud)
他们调用您粘贴的宏."##"运算符将两个代码字连接成一个单词,因此第一行生成的代码(使用宏扩展)看起来像这样:
static __inline void
ciss_initq_free(struct ciss_softc *sc)
{
STAILQ_INIT(&sc->ciss_free);
CISSQ_INIT(sc, CISSQ_FREE);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5393 次 |
最近记录: |