[問題] 請問一個 #define 的問題

看板C_and_CPP作者 (My Best My Life)時間12年前 (2013/04/18 07:49), 編輯推噓3(307)
留言10則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) linux 問題(Question): #define PRINT_ERROR(fmt,arg...) printk("<<-PRINT-ERROR->> "fmt"\n",##arg) #define DEBUG_ON 0 #define PRINT_DEBUG(fmt,arg...) do{\ if(DEBUG_ON)\ printk("<<-PRINT-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg);\ }while(0) 程式碼如上 這種define的語法,如fmt與##arg的部分我不懂該如何用 書上也都只講最基本的用法 麻煩大大教學下,或哪有相關教學的網頁 我在寫code的時候try出一個現象 寫 PRINT_DEBUG("my message"); 沒問題 寫 PRINT_DEBUG("my message\n"); 且 #define DEBUG_ON 0 時會系統出現一些我無法解釋的怪現象 #define DEBUG_ON 1 時又正常了 請問寫法是否有何問題? -- 無名困螻蟻,有名世所疑。中庸難為體,狂狷不及時。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.218.209.110

04/18 14:35, , 1F
define 地雷不少
04/18 14:35, 1F

04/18 16:43, , 2F
我覺得問題出在 ##...cppgm 剛寫完這部份的東西總感覺 ##arg
04/18 16:43, 2F

04/18 16:46, , 3F
放在這裡好像會出一些奇怪的事...
04/18 16:46, 3F

04/18 16:53, , 4F
啊我好像搜尋到了...那個沒問題 @@
04/18 16:53, 4F

04/18 16:53, , 5F
原 PO 要不要講一下你看到的怪現象有哪些?
04/18 16:53, 5F

04/18 16:57, , 6F
補充一下那個 ## 好了: http://tinyurl.com/mp7brw
04/18 16:57, 6F

04/18 16:58, , 7F
這是 gnu extension, 當 ## 左邊是逗號右邊是命名變動參數時
04/18 16:58, 7F

04/18 16:59, , 8F
如果那個變動參數是空的時候 逗號會被吃掉
04/18 16:59, 8F

04/18 16:59, , 9F
以原 PO 的例子就是 fmt 為 "my message" arg 為空
04/18 16:59, 9F

04/18 17:00, , 10F
所以代進去時會把 ## 前面的逗號給吃掉 這樣就不會 error
04/18 17:00, 10F
文章代碼(AID): #1HRpK7km (C_and_CPP)