打印

LWIP 中的ip_addr.h的疑问

[复制链接]
4232|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bluesteed|  楼主 | 2007-7-4 18:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define ip_addr_debug_print(debug, ipaddr) LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, 
        ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff:0, 
        ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff:0, 
        ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff:0, 
        ipaddr?(u16_t)ntohl((ipaddr)->addr) & 0xff:0U))

这个里面的%"U16_F"到底是什么意思?
还有下面的又是什么意义?

相关帖子

沙发
high| | 2007-7-4 20:26 | 只看该作者

不知道他用的什么编译器。

可以考虑直接改成%U这样的形式,否则编译都通不过。记得当时我就这么干。
如果不要调试信息,把那个宏指空也可以了。

使用特权

评论回复
板凳
armecos| | 2007-7-5 06:28 | 只看该作者

这是为了解决移植性问题所做的改进

    在某些平台中格式描述符“%d”表示一个32bit的int类型,而在另外平台中“%d”表示一个16bit的int类型。
    增加_F宏的想法是为了拥有一个尺寸类型标识来区分(sn)printf描述字符串中的每一种类型。“U16_F”要在cc.h中定义。
    
    例如:c16x移植范例中的cc.h
    
typedef unsigned   char    u8_t;
typedef signed     char    s8_t;
typedef unsigned   short   u16_t;
typedef signed     short   s16_t;
typedef unsigned   long    u32_t;
typedef signed     long    s32_t;

typedef u32_t mem_ptr_t;

/* Define (sn)printf formatters for these lwIP types */
#define U16_F "hu"
#define S16_F "hd"
#define X16_F "hx"
#define U32_F "lu"
#define S32_F "ld"
#define X32_F "lx"

    "%"U16_F".%"U16_F".%"U16_F".%"U16_F的意思就是:%hu.%hu.%hu.%hu。
    
    ""是连字符,表示这些语句是写在一行里的,为了清晰,把他们写在了不同行,其实是一行。
    例如:
    printf(" 
        %d ", 
        a);
    就表示:
    printf("%d ", a);
    
    
    www.armecos.com

使用特权

评论回复
地板
bluesteed|  楼主 | 2007-7-5 13:44 | 只看该作者

谢谢

非常感谢楼上2位的解答,请问2位有没有搞过调试这部分

使用特权

评论回复
5
bluesteed|  楼主 | 2007-7-5 14:08 | 只看该作者

还有疑问

/* Define (sn)printf formatters for these lwIP types */
#define U16_F "hu"
#define S16_F "hd"
#define X16_F "hx"
#define U32_F "lu"
#define S32_F "ld"
#define X32_F "lx"

还不是很清楚,hu前面的那个h是什么意思,u应该是代表无符号十进制整数?

使用特权

评论回复
6
mybao| | 2007-7-5 18:02 | 只看该作者

l和h是长度修正符

C语言的教材里面
关于格式字符
讲了

使用特权

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

本版积分规则

10

主题

30

帖子

0

粉丝