LWIP 中的ip_addr.h的疑问

[复制链接]
5433|5
 楼主| bluesteed 发表于 2007-7-4 18:40 | 显示全部楼层 |阅读模式
#define&nbsp;ip_addr_debug_print(debug,&nbsp;ipaddr)&nbsp;LWIP_DEBUGF(debug,&nbsp;(&quot;%&quot;U16_F&quot;.%&quot;U16_F&quot;.%&quot;U16_F&quot;.%&quot;U16_F,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipaddr?(u16_t)(ntohl((ipaddr)-&gtaddr)&nbsp;&gt&gt&nbsp;24)&nbsp;&&nbsp;0xff:0,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipaddr?(u16_t)(ntohl((ipaddr)-&gtaddr)&nbsp;&gt&gt&nbsp;16)&nbsp;&&nbsp;0xff:0,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipaddr?(u16_t)(ntohl((ipaddr)-&gtaddr)&nbsp;&gt&gt&nbsp;8)&nbsp;&&nbsp;0xff:0,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipaddr?(u16_t)ntohl((ipaddr)-&gtaddr)&nbsp;&&nbsp;0xff:0U))<br /><br />这个里面的%&quot;U16_F&quot;到底是什么意思?<br />还有下面的又是什么意义?
high 发表于 2007-7-4 20:26 | 显示全部楼层

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

可以考虑直接改成%U这样的形式,否则编译都通不过。记得当时我就这么干。<br />如果不要调试信息,把那个宏指空也可以了。
armecos 发表于 2007-7-5 06:28 | 显示全部楼层

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

&nbsp;&nbsp;&nbsp;&nbsp;在某些平台中格式描述符“%d”表示一个32bit的int类型,而在另外平台中“%d”表示一个16bit的int类型。<br />&nbsp;&nbsp;&nbsp;&nbsp;增加_F宏的想法是为了拥有一个尺寸类型标识来区分(sn)printf描述字符串中的每一种类型。“U16_F”要在cc.h中定义。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;例如:c16x移植范例中的cc.h<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />typedef&nbsp;unsigned&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;u8_t;<br />typedef&nbsp;signed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;s8_t;<br />typedef&nbsp;unsigned&nbsp;&nbsp;&nbsp;short&nbsp;&nbsp;&nbsp;u16_t;<br />typedef&nbsp;signed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;&nbsp;&nbsp;s16_t;<br />typedef&nbsp;unsigned&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;u32_t;<br />typedef&nbsp;signed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;s32_t;<br /><br />typedef&nbsp;u32_t&nbsp;mem_ptr_t;<br /><br />/*&nbsp;Define&nbsp;(sn)printf&nbsp;formatters&nbsp;for&nbsp;these&nbsp;lwIP&nbsp;types&nbsp;*/<br />#define&nbsp;U16_F&nbsp;&quot;hu&quot;<br />#define&nbsp;S16_F&nbsp;&quot;hd&quot;<br />#define&nbsp;X16_F&nbsp;&quot;hx&quot;<br />#define&nbsp;U32_F&nbsp;&quot;lu&quot;<br />#define&nbsp;S32_F&nbsp;&quot;ld&quot;<br />#define&nbsp;X32_F&nbsp;&quot;lx&quot;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;%&quot;U16_F&quot;.%&quot;U16_F&quot;.%&quot;U16_F&quot;.%&quot;U16_F的意思就是:%hu.%hu.%hu.%hu。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;是连字符,表示这些语句是写在一行里的,为了清晰,把他们写在了不同行,其实是一行。<br />&nbsp;&nbsp;&nbsp;&nbsp;例如:<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%d
&quot;,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a);<br />&nbsp;&nbsp;&nbsp;&nbsp;就表示:<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%d
&quot;,&nbsp;a);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;www.armecos.com
 楼主| bluesteed 发表于 2007-7-5 13:44 | 显示全部楼层

谢谢

非常感谢楼上2位的解答,请问2位有没有搞过调试这部分
 楼主| bluesteed 发表于 2007-7-5 14:08 | 显示全部楼层

还有疑问

/*&nbsp;Define&nbsp;(sn)printf&nbsp;formatters&nbsp;for&nbsp;these&nbsp;lwIP&nbsp;types&nbsp;*/<br />#define&nbsp;U16_F&nbsp;&quot;hu&quot;<br />#define&nbsp;S16_F&nbsp;&quot;hd&quot;<br />#define&nbsp;X16_F&nbsp;&quot;hx&quot;<br />#define&nbsp;U32_F&nbsp;&quot;lu&quot;<br />#define&nbsp;S32_F&nbsp;&quot;ld&quot;<br />#define&nbsp;X32_F&nbsp;&quot;lx&quot;<br /><br />还不是很清楚,hu前面的那个h是什么意思,u应该是代表无符号十进制整数?
mybao 发表于 2007-7-5 18:02 | 显示全部楼层

l和h是长度修正符

C语言的教材里面<br />关于格式字符<br />讲了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

30

帖子

0

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