暴走的指压师

为何中年妇女对14岁正太不理不睬?28岁大妈是如何保持14岁身材与脸颊?三无蓝毛究竟身在何处?为何少年抛弃妹子去寻找基友的菊花,大妈抛弃正太去和眼镜妹百合? 一切的一切,请看《Q ヱヴァンゲリヲン新劇場版:Q 》
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如何定义不定参数的宏

Posted on 2011-09-22 22:20  晓彻  阅读(633)  评论(0编辑  收藏  举报
如何定义不定参数的宏 (2008-01-19 11:33)
分类: C/C++

大家都知道printf是不定参数的函数,那是否有不定参数的宏呢?可以!在最近工作中学要把一些debug信息打印出来,想定义一个宏printf_debug来做这件事情。当时搜索的两篇文章忘了复制下来,可以去搜索一下看看原理更容易理解。

#if (PRINTF_DEBUG_MSG == NU_TRUE)
#if (C99_SUPPORT == NU_TRUE)
#define printf_debug(...) printf_uart(__VA_ARGS__)
/* usage : printf_debug("%s.%d", "debug", 1); */
#else
#define printf_debug(args) (printf_uart args)
/* usage : printf_debug(("%s.%d", "debug", 1)); (Note : Double parentheses)*/
#endif
#else
#define printf_debug(...)
#endif

函数为:

void printf_uart(const char *format, ...)
{
    va_list arg;
    char tmp[255];
    va_start(arg, format); 
    vsprintf(tmp, format, arg); 
    va_end(arg); 
    uart_write(DATA_PORT, tmp, strlen(tmp));
}