C语言问题请教!

[复制链接]
2443|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

粉丝
快速回复 在线客服 返回列表 返回顶部