reer 发表于 2011-11-22 14:40:16

定义了一个宏 debug_printf() ,怎么不能用呢?

定义了一个宏 debug_printf() ,怎么不能用呢?


___代码______________________________________

#include <stdio.h>

#define DEBUG_PRINTF

#if define DEBUG_PRINTF
#define debug_printf(...) fprintf(stderr, ...)
#else
#define debug_printf(...) do{}while(0);
#endif


int main (void)
{
         debug_printf ("hello\n");
         return 0;
}

LitePuter_uvn 发表于 2011-11-22 16:00:01

printf有实现吗???
你想printf到哪里显示??

reer 发表于 2011-11-22 16:18:37

printf是标准输出吧

我是显示在标准输出上

ilcvm 发表于 2011-11-22 16:45:13

#if define DEBUG_PRINTF
#define debug_printf printf
#else
#define debug_printf(...) do{}while(0);
#endif

这样应该就可以了

security 发表于 2011-11-22 16:49:20

是#if defined(DEBUG_PRINTF)吧

LitePuter_uvn 发表于 2011-11-22 16:49:47

你的程序是电脑程序吗??如果是那就输出在屏幕上,如果是单片机,你想输出在哪个所谓的“标准”输出上,如果是串口终端,那某些单片机需要编写输出串口的函数的,不是每个mcu都自动支持的~~~~

reer 发表于 2011-11-22 16:55:52

to ilcvm:
如果想替代 fprintf (stderr, ...)呢?

to security:
是的,是#if defined(DEBUG_PRINTF)

to LitePuter_uvn:
是输出到屏幕上,不是单片机,是linux上的程序

谢谢三位高手啊~

ilcvm 发表于 2011-11-22 17:02:07

#define debug_printf(format,...) fprintf (stderr,format, __VA_ARGS__)

不过这种在MDK的编译器是不能debug_printf ("hello\n")这样用的,只能debug_printf ("%s","hello\n"),就是必须有参数

reer 发表于 2011-11-22 17:31:41

to ilcvm:
活学活用了一下你的帖子,我这样写就都可以了:
#define debug_printf(...) fprintf (stderr, __VA_ARGS__)

___代码______________________________________

#include <stdio.h>

#define DEBUG_PRINTF
#if defined DEBUG_PRINTF
#define debug_printf(...) fprintf (stderr, __VA_ARGS__)
#else
#define debug_printf(...) do{}while(0);
#endif

int main (void)
{
      debug_printf("hello\n");
      debug_printf("hello, %d\n", 10);

      return 0;
}

reer 发表于 2011-11-22 17:33:09

谢谢 ilcvm!

这ourdev 真是太好了,其它地方得不到回答的地方,总会在这里得到解答

谢谢阿莫!

reer 发表于 2011-11-22 19:18:07

关于可变参数宏,这个网页的文章写得比较好:
http://blog.sina.com.cn/s/blog_661314940100qmfg.html

我的例子define debug_printf() 那里也可以这样写:
#define debug_printf(format, ...) fprintf (stderr, format, ## __VA_ARGS__)



注意:
少了 ## 编译会通不过
页: [1]
查看完整版本: 定义了一个宏 debug_printf() ,怎么不能用呢?