在 Linux driver 開發的初期我們常會為了程式的開發方便及除錯在裡面加了很多的debugmessage,

等到開發到了一定的階段才會拿掉。

首先先來看一下程式碼

/* Debug macros*/
#if defined(DEBUG) /* limited debug messages */
#define DBG(fmt,arg...) \ printk(KERN_INFO "[DRV] :"fmt"\n",## arg)
#define DTL(fmt,arg...) \ printk(KERN_INFO "[DRV] :"fmt"\n",## arg)
#endif

我們可以利用 gcc -E 來觀看程式碼被展開之後的樣子,例如:

ERR("%s:%d",filename,line)

會被展開為:

printk(KERN_ERR "[DRV]:%s:%d\n", filename, line)

-------------------

其中"%s:%d"會被對應到fmt,

而 filename, line 會被對應到arg...,

如何把 arg 對應到多個變數呢? 就是靠... 和 ## 來達成,

arg... 表示arg的參數可以是零個或多個,這些由參數以及參數之間的逗號構成

##arg 表示 arg 之前的字串要保留

BB 發表在 痞客邦 PIXNET 留言(0) 人氣()