gcc下调试打印宏的连接问题

gcc下调试打印宏的连接问题,gcc,visual-c++,concatenation,c-preprocessor,Gcc,Visual C++,Concatenation,C Preprocessor,要完全禁用c-source中的调试输出, 我通常定义以下简单宏#1 #定义dprintf(args) 要启用调试输出,我可以选择定义宏#2 #定义dprintf(args)printk##args 源代码中的用法如下所示: dprintf(((“IRQ:%lu\n”,IRQ)) 如果我使用宏#2,预处理器应该创建以下行 printk(“IRQ:%lu\n”,IRQ) Windows Visual C++下,没有问题。 在NETBEANS IDE 6.8下使用gcc版本4.4.1(Ubuntu

要完全禁用c-source中的调试输出, 我通常定义以下简单宏#1

#定义dprintf(args)

要启用调试输出,我可以选择定义宏#2

#定义dprintf(args)printk##args

源代码中的用法如下所示:

dprintf(((“IRQ:%lu\n”,IRQ))

如果我使用宏#2,预处理器应该创建以下行

printk(“IRQ:%lu\n”,IRQ)

Windows Visual C++下,没有问题。 在NETBEANS IDE 6.8下使用gcc版本4.4.1(Ubuntu 4.4.1-4ubuntu9), 我收到以下错误消息:

“printk”和“(”未提供有效的预处理令牌

我在Linux下尝试了以下方法

#定义dprintk(args…)printk(args)

这只适用于
dprintf(“IRQ:%lu\n”,IRQ);

Visual C++但不知道代码> ARGs…< /COD> < /P> 我必须在windows上编译源代码 以及Linux(386)平台

有人有主意吗?

为什么不
#定义dprintf(args)打印args


双括号可被添加以替换VisualC++中的变量宏:预处理器将处理宏调用,好像只有一个参数。

< p>令牌粘贴操作符<代码> > > <代码>只能用于连接<强>令牌< /St>,如编译器的名称,例如GCC,E的新版本。正如您现在所发现的,要比其他人更严格地执行此操作。不过,正如前面所说的,在这个特定示例中,您实际上不需要