頭文件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