头文件cissvar.h有这样的定义:使用双散列(##)用C
#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);
这将是巨大的,如果有人能解释这是如何工作的。
所以,
1)名称指的是 “自由” 或 “通知”
2)哪里 “指数” 从何而来? 3)编译器如何在.h和.c之间进行魔术绑定?
通过预处理器运行它,请参阅... – alk 2013-04-08 17:24:21
[函数调用中的参数之前的双重散列]可能的重复(http://stackoverflow.com/questions/7880058/double-hash-before-parameter-in-function-call)或[code-what-双重哈希的意思](http://stackoverflow.com/questions/653466/reading-zend-engine-api-code-what-does-double-hash-means) – Mike 2013-04-08 17:26:39
*实际使用*将需要看起来像'CISSQ_REQUEST_QUEUE(name,idx)',并且会创建一个包含'name'和'idx'的函数。 '##''符号是预处理器的标记粘贴操作符,它基本上使用静态文本和/或宏参数,并将它们组合成单个字符串供编译器稍后使用。 – 2013-04-08 17:27:20