﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-brucejini</title><link>http://www.cppblog.com/brucejini/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 20:33:59 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 20:33:59 GMT</pubDate><ttl>60</ttl><item><title>typedef 的用法</title><link>http://www.cppblog.com/brucejini/archive/2011/02/18/140256.html</link><dc:creator>路人甲</dc:creator><author>路人甲</author><pubDate>Fri, 18 Feb 2011 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/brucejini/archive/2011/02/18/140256.html</guid><wfw:comment>http://www.cppblog.com/brucejini/comments/140256.html</wfw:comment><comments>http://www.cppblog.com/brucejini/archive/2011/02/18/140256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/brucejini/comments/commentRss/140256.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/brucejini/services/trackbacks/140256.html</trackback:ping><description><![CDATA[<h1 align=center>typedef 的用法</h1>
<p>&nbsp;</p>
<p>*****以下是参考部分*****</p>
<p>&nbsp;</p>
<p>此部分参考自：<a href="http://blog.sina.com.cn/u/572f7666010008dm">http://blog.sina.com.cn/u/572f7666010008dm</a></p>
<p>&nbsp;</p>
<p>用途一：</p>
<p>&nbsp;</p>
<p>定义一种类型的别名，而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如：</p>
<p>&nbsp;</p>
<p>char* pa, pb;&nbsp; // 这多数不符合我们的意图，它只声明了一个指向字符变量的指针，</p>
<p>&nbsp;</p>
<p>// 和一个字符变量；</p>
<p>&nbsp;</p>
<p>以下则可行：</p>
<p>&nbsp;</p>
<p>typedef char* PCHAR; </p>
<p>&nbsp;</p>
<p>PCHAR pa, pb;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>用途二：</p>
<p>&nbsp;</p>
<p>用在旧的C代码中，帮助struct。以前的代码中，声明struct新对象时，必须要带上struct，即形式为： struct 结构名对象名，如：</p>
<p>&nbsp;</p>
<p>struct tagPOINT1</p>
<p>&nbsp;{</p>
<p><br>&nbsp;&nbsp;&nbsp; int x; </p>
<p>&nbsp;&nbsp;&nbsp; int y; </p>
<p>};</p>
<p>&nbsp;</p>
<p>struct tagPOINT1 p1;</p>
<p>&nbsp;</p>
<p><br>而在C++中，则可以直接写：结构名对象名，即：tagPOINT1 p1;</p>
<p>&nbsp;</p>
<p>typedef struct tagPOINT</p>
<p><br>{</p>
<p><br>&nbsp;&nbsp;&nbsp; int x;</p>
<p><br>&nbsp;&nbsp;&nbsp; int y;</p>
<p><br>}POINT;</p>
<p>&nbsp; </p>
<p>POINT p1; // 这样就比原来的方式少写了一个struct，比较省事，尤其在大量使用的时候</p>
<p>&nbsp;</p>
<p>或许，在C++中，typedef的这种用途二不是很大，但是理解了它，对掌握以前的旧代码还是有帮助的，毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>用途三：</p>
<p>&nbsp;</p>
<p>用typedef来定义与平台无关的类型。</p>
<p>&nbsp;</p>
<p>比如定义一个叫 REAL 的浮点类型，在目标平台一上，让它表示最高精度的类型为：</p>
<p>&nbsp;</p>
<p>typedef long double REAL;</p>
<p>&nbsp;</p>
<p>在不支持 long double 的平台二上，改为：</p>
<p>&nbsp;</p>
<p>typedef double REAL;</p>
<p>&nbsp;</p>
<p>在连 double 都不支持的平台三上，改为：</p>
<p>&nbsp;</p>
<p>typedef float REAL;</p>
<p>&nbsp;</p>
<p>也就是说，当跨平台时，只要改下 typedef 本身就行，不用对其他源码做任何修改。</p>
<p>&nbsp;</p>
<p>标准库就广泛使用了这个技巧，比如size_t。</p>
<p>&nbsp;</p>
<p>另外，因为typedef是定义了一种类型的新别名，不是简单的字符串替换，所以它比宏来得稳健。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>用途四： </p>
<p>&nbsp;</p>
<p>为复杂的声明定义一个新的简单的别名。方法是：在原来的声明里逐步用别名替换一部分复杂声明，如此循环，把带变量名的部分留到最后替换，得到的就是原声明的最简化版。举例：&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;原声明：void (*b[10]) (void (*)());</p>
<p>&nbsp;</p>
<p>变量名为b，先替换右边部分括号里的，pFunParam为别名一：</p>
<p>&nbsp;</p>
<p>typedef void (*pFunParam)();</p>
<p>&nbsp;</p>
<p>再替换左边的变量b，pFunx为别名二：</p>
<p>&nbsp;</p>
<p>typedef void (*pFunx)(pFunParam);</p>
<p>&nbsp;</p>
<p>原声明的最简化版：</p>
<p>&nbsp;</p>
<p>pFunx b[10];</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>原声明：doube(*)() (*e)[9];</p>
<p>&nbsp;</p>
<p>变量名为e，先替换左边部分，pFuny为别名一：</p>
<p>&nbsp;</p>
<p>typedef double(*pFuny)();</p>
<p>&nbsp;</p>
<p>再替换右边的变量e，pFunParamy为别名二</p>
<p>&nbsp;</p>
<p>typedef pFuny (*pFunParamy)[9];</p>
<p>&nbsp;</p>
<p>原声明的最简化版：</p>
<p>&nbsp;</p>
<p>pFunParamy e;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>理解复杂声明可用的&#8220;右左法则&#8221;：从变量名看起，先往右，再往左，碰到一个圆括号就调转阅读的方向；括号内分析完就跳出括号，还是按先右后左的顺序，如此循环，直到整个声明分析完。举例：</p>
<p>&nbsp;</p>
<p>int (*func)(int *p);</p>
<p>&nbsp;</p>
<p>首先找到变量名func，外面有一对圆括号，而且左边是一个*号，这说明func是一个指针；然后跳出这个圆括号，先看右边，又遇到圆括号，这说明(*func)是一个函数，所以func是一个指向这类函数的指针，即函数指针，这类函数具有int*类型的形参，返回值类型是int。</p>
<p>&nbsp;</p>
<p>int (*func[5])(int *);</p>
<p>&nbsp;</p>
<p>func右边是一个[]运算符，说明func是具有5个元素的数组；func的左边有一个*，说明func的元素是指针（注意这里的*不是修饰func，而是修饰func[5]的，原因是[]运算符优先级比*高，func先跟[]结合）。跳出这个括号，看右边，又遇到圆括号，说明func数组的元素是函数类型的指针，它指向的函数具有int*类型的形参，返回值类型为int。</p>
<p>&nbsp;</p>
<p>*****以上为参考部分，以下为本人领悟部分*****</p>
<p>&nbsp;</p>
<p>使用示例：</p>
<p>&nbsp;</p>
<p>1.比较一：</p>
<p>&nbsp;</p>
<p>#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>&nbsp;</p>
<p>typedef int (*A) (char, char);</p>
<p>&nbsp;</p>
<p>int ss(char a, char b)</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"功能1"&lt;&lt;endl;</p>
<p>&nbsp;&nbsp;&nbsp; cout&lt;&lt;a&lt;&lt;endl;</p>
<p>&nbsp;&nbsp;&nbsp; cout&lt;&lt;b&lt;&lt;endl;</p>
<p>&nbsp;&nbsp;&nbsp; return 0;</p>
<p>}</p>
<p>&nbsp;</p>
<p>int bb(char a, char b)</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"功能2"&lt;&lt;endl;</p>
<p>&nbsp;&nbsp;&nbsp; cout&lt;&lt;b&lt;&lt;endl;</p>
<p>&nbsp;&nbsp;&nbsp; cout&lt;&lt;a&lt;&lt;endl;</p>
<p>&nbsp;&nbsp;&nbsp; return 0;</p>
<p>}</p>
<p>&nbsp;</p>
<p>void main()</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; A a;</p>
<p>&nbsp;&nbsp;&nbsp; a = ss;</p>
<p>&nbsp;&nbsp;&nbsp; a('a','b');</p>
<p>&nbsp;&nbsp;&nbsp; a = bb;</p>
<p>&nbsp;&nbsp;&nbsp; a('a', 'b');</p>
<p>}</p>
<p>&nbsp;</p>
<p>2.比较二：</p>
<p>&nbsp;</p>
<p>typedef int (A) (char, char);</p>
<p>&nbsp;</p>
<p>void main()</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; A *a;</p>
<p>&nbsp;&nbsp;&nbsp; a = ss;</p>
<p>&nbsp;&nbsp;&nbsp; a('a','b');</p>
<p>&nbsp;&nbsp;&nbsp; a = bb;</p>
<p>&nbsp;&nbsp;&nbsp; a('a','b');</p>
<p>}</p>
<p>&nbsp;</p>
<p>两个程序的结果都一样：</p>
<p>功能1</p>
<p>a</p>
<p>b</p>
<p>功能2</p>
<p>b</p>
<p>a</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>*****以下是参考部分*****</p>
<p>&nbsp;</p>
<p>参考自：<a href="http://blog.hc360.com/portal/personShowArticle.do?articleId=57527">http://blog.hc360.com/portal/personShowArticle.do?articleId=57527</a></p>
<p>&nbsp;</p>
<p>typedef 与 #define的区别：</p>
<p>&nbsp;</p>
<p>案例一：</p>
<p>&nbsp;</p>
<p>通常讲，typedef要比#define要好，特别是在有指针的场合。请看例子：</p>
<p>typedef char *pStr1;</p>
<p>#define pStr2 char *;</p>
<p>pStr1 s1, s2;</p>
<p>pStr2 s3, s4;</p>
<p>&nbsp;</p>
<p>在上述的变量定义中，s1、s2、s3都被定义为char *，而s4则定义成了char，不是我们所预期的指针变量，根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>案例二：</p>
<p>&nbsp;</p>
<p>下面的代码中编译器会报一个错误，你知道是哪个语句错了吗？</p>
<p>typedef char * pStr;</p>
<p>char string[4] = "abc";</p>
<p>const char *p1 = string;</p>
<p>const pStr p2 = string;</p>
<p>p1++;</p>
<p>p2++;</p>
<p>&nbsp;</p>
<p>　　是p2++出错了。这个问题再一次提醒我们：typedef和#define不同，它不是简单的文本替换。上述代码中const pStr p2并不等于const char * p2。const pStr p2和const long x本质上没有区别，都是对变量进行只读限制，只不过此处变量p2的数据类型是我们自己定义的而不是系统固有类型而已。因此，const pStr p2的含义是：限定数据类型为char *的变量p2为只读，因此p2++错误。</p>
<img src ="http://www.cppblog.com/brucejini/aggbug/140256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/brucejini/" target="_blank">路人甲</a> 2011-02-18 11:35 <a href="http://www.cppblog.com/brucejini/archive/2011/02/18/140256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iphone DNS解析和网络测试</title><link>http://www.cppblog.com/brucejini/archive/2011/01/27/139437.html</link><dc:creator>路人甲</dc:creator><author>路人甲</author><pubDate>Thu, 27 Jan 2011 07:43:00 GMT</pubDate><guid>http://www.cppblog.com/brucejini/archive/2011/01/27/139437.html</guid><wfw:comment>http://www.cppblog.com/brucejini/comments/139437.html</wfw:comment><comments>http://www.cppblog.com/brucejini/archive/2011/01/27/139437.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/brucejini/comments/commentRss/139437.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/brucejini/services/trackbacks/139437.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#import&nbsp; &lt;CFNetwork/CFHost.h&gt;<br>#import &lt;netinet/in.h&gt;<br>#import &lt;netdb.h&gt;&nbsp; <br>#import &lt;SystemConfiguration/SystemConfiguration.h&gt;<br><br>#pragma&nbsp;mark&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;"><br>#pragma&nbsp;mark&nbsp;DNS解析和网络测试<br></span><span style="color: #000000;">-</span><span style="color: #000000;">(NSString</span><span style="color: #000000;">*</span><span style="color: #000000;">)&nbsp;getAddressFromArray:(CFArrayRef)&nbsp;addresses<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;sockaddr&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">addr;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipAddress[INET6_ADDRSTRLEN];<br>&nbsp;&nbsp;&nbsp;&nbsp;CFIndex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index,&nbsp;count;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(addresses&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFArrayGetCount(addresses);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(index&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;index&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;count;&nbsp;index</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;sockaddr&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)CFDataGetBytePtr(CFArrayGetValueAtIndex(addresses,&nbsp;index));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(addr&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;getnameinfo&nbsp;coverts&nbsp;an&nbsp;IPv4&nbsp;or&nbsp;IPv6&nbsp;address&nbsp;into&nbsp;a&nbsp;text&nbsp;string.&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getnameinfo(addr,&nbsp;addr</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">sa_len,&nbsp;ipAddress,&nbsp;INET6_ADDRSTRLEN,&nbsp;NULL,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;NI_NUMERICHOST);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(err&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">解析到ip地址：%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ipAddress);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">地址格式转换错误：%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;err);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;[[[NSString&nbsp;alloc]&nbsp;initWithFormat:</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,ipAddress]&nbsp;autorelease];</span><span style="color: #008000;">//</span><span style="color: #008000;">这里只返回最后一个，一般认为只有一个地址</span><span style="color: #008000;"><br></span><span style="color: #000000;">}<br><br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">(</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">)getReachability:(CFDataRef)&nbsp;data&nbsp;withNameOrAddress:(CFStringRef)&nbsp;nameOrAddress<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;SCNetworkConnectionFlags&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">flags;<br>&nbsp;&nbsp;&nbsp;&nbsp;CFIndex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">input;<br>&nbsp;&nbsp;&nbsp;&nbsp;Boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(data&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(nameOrAddress&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;CFStringGetMaximumSizeForEncoding&nbsp;determines&nbsp;max&nbsp;bytes&nbsp;a&nbsp;string&nbsp;of&nbsp;specified&nbsp;length&nbsp;will&nbsp;take&nbsp;up&nbsp;if&nbsp;encoded.&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFStringGetMaximumSizeForEncoding(CFStringGetLength(nameOrAddress),&nbsp;kCFStringEncodingASCII);<br>&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;malloc(length&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(input&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFStringGetCString(nameOrAddress,&nbsp;input,&nbsp;length&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;kCFStringEncodingASCII);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(success);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;flags&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(SCNetworkConnectionFlags&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)CFDataGetBytePtr(data);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert&nbsp;(flags&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;If&nbsp;you&nbsp;only&nbsp;have&nbsp;a&nbsp;PPP&nbsp;interface&nbsp;enabled,&nbsp;the&nbsp;flags&nbsp;will&nbsp;be&nbsp;0&nbsp;because&nbsp;of&nbsp;a&nbsp;bug.&nbsp;&lt;rdar://problem/3627771&gt;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s&nbsp;-&gt;&nbsp;Reachability&nbsp;Unknown\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;input);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;kSCNetworkFlagsTransientConnection)&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s&nbsp;-&gt;&nbsp;Transient&nbsp;Connection\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;input);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;kSCNetworkFlagsReachable)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s&nbsp;-&gt;&nbsp;Reachable\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;YES;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NO;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;kSCNetworkFlagsConnectionRequired)&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s&nbsp;-&gt;&nbsp;Connection&nbsp;Required\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;input);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;kSCNetworkFlagsConnectionAutomatic)&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s&nbsp;-&gt;&nbsp;Connection&nbsp;Automatic\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;input);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;kSCNetworkFlagsInterventionRequired)&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s&nbsp;-&gt;&nbsp;Intervention&nbsp;Required\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;input);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;kSCNetworkFlagsIsLocalAddress)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s&nbsp;-&gt;&nbsp;Is&nbsp;Local&nbsp;Address\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">flags&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;kSCNetworkFlagsIsDirect)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">%s&nbsp;-&gt;&nbsp;Is&nbsp;Direct\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;free(input);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;success;<br>}<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">)&nbsp;serverResoluton{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;CFStringRef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hostName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(CFStringRef)self.serverInfo.serverAddress;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CFHostRef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host;<br>&nbsp;&nbsp;&nbsp;&nbsp;CFStreamError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error;<br>&nbsp;&nbsp;&nbsp;&nbsp;Boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success;<br>&nbsp;&nbsp;&nbsp;&nbsp;CFArrayRef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addressArray;<br>&nbsp;&nbsp;&nbsp;&nbsp;CFDataRef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReachableData;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(hostName&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Creates&nbsp;a&nbsp;new&nbsp;host&nbsp;object&nbsp;with&nbsp;the&nbsp;given&nbsp;name.&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;host&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFHostCreateWithName(kCFAllocatorDefault,&nbsp;hostName);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(host&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFHostStartInfoResolution(host,&nbsp;kCFHostAddresses,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">error);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">success)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">CFHostStartInfoResolution&nbsp;返回错误&nbsp;(%d,&nbsp;%ld)</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;error.domain,&nbsp;error.error);</span><span style="color: #008000;">//</span><span style="color: #008000;">如果解析地址失败，使用直接指定IP</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">启用直接指定IP：%@</span><span style="color: #000000;">"</span><span style="color: #000000;">,self.serverInfo.serverIPAddress);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self.serverInfo.serverAddress&nbsp;release];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.serverInfo.serverAddress&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.serverInfo.serverIPAddress;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addressArray&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFHostGetAddressing(host,&nbsp;nil);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self.serverInfo.serverAddress&nbsp;release];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.serverInfo.serverAddress&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[[NSString&nbsp;alloc]&nbsp;initWithFormat:</span><span style="color: #000000;">@"</span><span style="color: #000000;">%@</span><span style="color: #000000;">"</span><span style="color: #000000;">,[self&nbsp;getAddressFromArray:addressArray]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">替换地址为：%@</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;self.serverInfo.serverAddress);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">使用新地址来确认可连接性</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;hostName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(CFStringRef)self.serverInfo.serverAddress;<br>&nbsp;&nbsp;&nbsp;&nbsp;host&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFHostCreateWithName(kCFAllocatorDefault,&nbsp;hostName);<br>&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFHostStartInfoResolution(host,&nbsp;kCFHostReachability,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">error);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">success)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(</span><span style="color: #000000;">@"</span><span style="color: #000000;">CFHostStartInfoResolution&nbsp;返回错误&nbsp;(%d,&nbsp;%ld)</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;error.domain,&nbsp;error.error);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">暂不知到这里会在什么情况下发生</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReachableData&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CFHostGetReachability(host,&nbsp;nil);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[self&nbsp;getReachability:ReachableData&nbsp;withNameOrAddress:(CFStringRef)hostName];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">success)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self.serverInfo.serverAddress&nbsp;release];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.serverInfo.serverAddress&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.serverInfo.serverAddressBak;</span><span style="color: #008000;">//</span><span style="color: #008000;">在这里添加备用服务器</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br><br>}<br></span></div><img src ="http://www.cppblog.com/brucejini/aggbug/139437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/brucejini/" target="_blank">路人甲</a> 2011-01-27 15:43 <a href="http://www.cppblog.com/brucejini/archive/2011/01/27/139437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Xcode快捷键</title><link>http://www.cppblog.com/brucejini/archive/2010/12/24/137367.html</link><dc:creator>路人甲</dc:creator><author>路人甲</author><pubDate>Fri, 24 Dec 2010 03:55:00 GMT</pubDate><guid>http://www.cppblog.com/brucejini/archive/2010/12/24/137367.html</guid><wfw:comment>http://www.cppblog.com/brucejini/comments/137367.html</wfw:comment><comments>http://www.cppblog.com/brucejini/archive/2010/12/24/137367.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/brucejini/comments/commentRss/137367.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/brucejini/services/trackbacks/137367.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
Command + Shift + E ：扩展编辑器<br>Command + [ ：左移代码块<br>Command + ] ：右移代码块<br>Tab ：接受代码提示<br>Esc ：显示代码提示菜单<br>Ctrl + . （句点）：循环浏览代码提示<br>Shift + Ctrl + . （句点）：反向循环浏览代码提示<br>Ctrl + / ：移动到代码提示中的下一个占位符<br>Command + Ctrl + S ：创建快照<br>Ctrl + F ：前移光标<br>Ctrl + B ：后移光标<br>Ctrl + P ：移动光标到上一行<br>Ctrl + N：移动光标到下一行<br>Ctrl + A : 移动光标到本行行首<br>Ctrl + E : 移动光标到本行行尾<br>Ctrl + T ：交换光标左右两边的字符<br>Ctrl + D：删除光标右边的字符<br>Ctrl + K ：删除本行<br>Ctrl + L : 将插入点置于窗口正中<br>Command + Alt + D：显示open quickly 窗口<br>Command + Alt + 上方向键 ：打开配套文件<br>Command + D ：添加书签<br>Option + 双击：在文档中搜索<br>Command + Y ：以调试方式运行程序<br>Command + Alt + P ： 继续（在调试中）<br>Command + Alt + 0 ：跳过<br>Command + Alt + I ：跳入<br>Command + Alt + T ：跳出 
<img src ="http://www.cppblog.com/brucejini/aggbug/137367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/brucejini/" target="_blank">路人甲</a> 2010-12-24 11:55 <a href="http://www.cppblog.com/brucejini/archive/2010/12/24/137367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>obj-c字符串匹配符</title><link>http://www.cppblog.com/brucejini/archive/2010/08/04/122228.html</link><dc:creator>路人甲</dc:creator><author>路人甲</author><pubDate>Wed, 04 Aug 2010 10:11:00 GMT</pubDate><guid>http://www.cppblog.com/brucejini/archive/2010/08/04/122228.html</guid><wfw:comment>http://www.cppblog.com/brucejini/comments/122228.html</wfw:comment><comments>http://www.cppblog.com/brucejini/archive/2010/08/04/122228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/brucejini/comments/commentRss/122228.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/brucejini/services/trackbacks/122228.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 12345;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NSLog( @"%d", i );参数类型的匹配格式如下</p>
<ul>
    <li>%@ &nbsp; &nbsp; 对象
    <li>%d, %i 整数
    <li>%u &nbsp; &nbsp;&nbsp;无符整形
    <li>%f &nbsp; &nbsp; 浮点/双字
    <li>%x, %X 二进制整数
    <li>%o &nbsp; &nbsp; 八进制整数
    <li>%zu &nbsp; &nbsp;size_t
    <li>%p &nbsp; &nbsp; 指针
    <li>%e &nbsp; &nbsp;&nbsp;浮点/双字 （科学计算）
    <li>%g &nbsp; &nbsp;&nbsp;浮点/双字&nbsp;
    <li>%s &nbsp; &nbsp; C 字符串
    <li>%.*s &nbsp; Pascal字符串
    <li>%c &nbsp; &nbsp; 字符
    <li>%C &nbsp; &nbsp; unichar
    <li>%lld &nbsp; 64位长整数（long long）
    <li>%llu &nbsp;&nbsp;无符64位长整数
    <li>%Lf &nbsp; &nbsp;64位双字 </li>
</ul>
<img src ="http://www.cppblog.com/brucejini/aggbug/122228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/brucejini/" target="_blank">路人甲</a> 2010-08-04 18:11 <a href="http://www.cppblog.com/brucejini/archive/2010/08/04/122228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PostMessage只能传指针</title><link>http://www.cppblog.com/brucejini/archive/2009/12/30/104465.html</link><dc:creator>路人甲</dc:creator><author>路人甲</author><pubDate>Wed, 30 Dec 2009 09:22:00 GMT</pubDate><guid>http://www.cppblog.com/brucejini/archive/2009/12/30/104465.html</guid><wfw:comment>http://www.cppblog.com/brucejini/comments/104465.html</wfw:comment><comments>http://www.cppblog.com/brucejini/archive/2009/12/30/104465.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/brucejini/comments/commentRss/104465.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/brucejini/services/trackbacks/104465.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用PostMessage传的两个参数貌似只能传传指针和基本数据类型，大的东西没戏，字符串也没戏。指针传过去发现所指的数据没了，郁闷<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emunlove.gif" align=absMiddle border=0>
<img src ="http://www.cppblog.com/brucejini/aggbug/104465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/brucejini/" target="_blank">路人甲</a> 2009-12-30 17:22 <a href="http://www.cppblog.com/brucejini/archive/2009/12/30/104465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>