2010-06-23 30 views
0

調試打印宏級聯問題在C-源完全禁用調試輸出, 我通常定義以下簡單的宏#1與下GCC

#define dprintf(args)

要啓用調試輸出,我定義宏#2替換地

#define dprintf(args) printk##args

在源的使用是這樣的:

如果我使用

dprintf(("Irqs:%lu\n",irqs));

預處理器應該創建以下行的宏#2

printk("Irqs:%lu\n",irqs);

在Windows環境下的Visual C++,是沒有問題的。

下是NetBeans IDE 6.8, 使用gcc版本4.4.1(Ubuntu的4.4.1-4ubuntu9)我得到了以下錯誤消息:

"printk" and "(" does not give a valid preprocessing token

我試過的Linux

以下#define dprintk(args...) printk(args)

這僅適用於 dprintf("Irqs:%lu\n",irqs);

的Visual C++但是不知道args...

我必須在Windows上編譯 和Linux(386)平臺的源代碼或者。

有沒有人有想法?

回答

2

爲什麼不是#define dprintf(args) print args

可以添加雙括號以替換visual C++中的可變宏:預處理器將處理宏調用,就好像只有一個參數一樣。

0

令牌粘貼運算符##只能用於連接令牌,正如其名稱所暗示的那樣。一些編譯器,例如新版本的gcc,比你現在發現的更強硬地執行它。因爲philippe說,但是,在這個特定的例子中,你實際上並不需要##