打印

C语言问题请教!

[复制链接]
1989|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子乌托邦|  楼主 | 2010-3-5 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
lwip有个调试函数:
#  define LWIP_DEBUGF(debug,x) \
do {\
     if (((debug) & DBG_ON) && ((debug) & DBG_TYPES_ON) && ((s16_t)((debug) & DBG_MASK_LEVEL) >= DBG_MIN_LEVEL)) \
    {\
          LWIP_PLATFORM_DIAG(x); \
          if ((debug) & DBG_HALT)\
               while(1);\
    }\
} while(0)

应用的时候,上文红色x有时候是一个字符串:eg.LWIP_DEBUGF(NETIF_DEBUG, (" netmask "));
有时候却对应几个参数eg.LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: found %c%c\n", name[0], name[1]));
我该怎样构造这个LWIP_PLATFORM_DIAG(x); 函数呢?

说明:已有串口发送函数void USART_SendString(u8*p);
要是x只对应字符串,直接用USART_SendString替换,现在x不只对应一个字符串,有可能对应几个!搞不了了,求大家帮忙看看!

相关帖子

沙发
lxyppc| | 2010-3-5 11:23 | 只看该作者
本帖最后由 lxyppc 于 2010-3-5 11:25 编辑

#define  LWIP_PLATFORM_DIAG(x)      printf x

LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: found %c%c\n", name[0], name[1]));
==>
LWIP_PLATFORM_DIAG( ("netif_find: found %c%c\n", name[0], name[1]) );
==>
printf  ("netif_find: found %c%c\n", name[0], name[1])


注意红色部分的括号,括号里的所有内容包括都做为了宏参来传递,这种方法很多代码中都有用到

这种写法要求你的函数实现变参
即void USART_SendString(const u8* p, ...);

使用特权

评论回复
板凳
mohanwei| | 2010-3-9 21:58 | 只看该作者
变参函数而已,C语法支持的,库函数里常用。一般人自己写的话很少用到

使用特权

评论回复
地板
电子乌托邦|  楼主 | 2010-3-10 10:36 | 只看该作者
谢谢2l前辈!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

140

主题

633

帖子

2

粉丝