﻿<?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++博客-前进的路上-随笔分类-C++</title><link>http://www.cppblog.com/wc250en007/category/14000.html</link><description>前进的路上</description><language>zh-cn</language><lastBuildDate>Sat, 27 Dec 2014 04:37:50 GMT</lastBuildDate><pubDate>Sat, 27 Dec 2014 04:37:50 GMT</pubDate><ttl>60</ttl><item><title>C++学习笔记05 由类名创建对象</title><link>http://www.cppblog.com/wc250en007/archive/2012/08/30/188728.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Thu, 30 Aug 2012 04:15:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/08/30/188728.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/188728.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/08/30/188728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/188728.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/188728.html</trackback:ping><description><![CDATA[<div>1.应用：<br /><strong>也许需要一个脚本，脚本中有一个参数传递类名，你需要通过类名来动态的创建这个对象，这时候就需要动态创建了</strong><br /><br />&nbsp;2.原理：<br />C++不是动态语言，所以没法从语言机制上实现类的动态创建，但这样的需求却有可能存在，一个类似的例子便是MFC中CWnd类的Create方法，其第一个参数为Window Class的名字，这就允许用户通过class的名字来创建相应的窗口。</div><div>&nbsp;要想实现这一点，<span style="color: red; ">必须有一个&#8220;管理中心&#8221;，用于登记类的名字，并且通过名字能够调用对应的创建方法来创建相应的实例</span>。结合类工厂的设计思想，这里我们让一套继承体系中的基类作为&#8220;管理中心&#8221;，由它来维护所有派生类的必要信息，包括类名和工厂函数，这二者必须建立起映射关系，map是不错的选择。定义了一个派生类后，它就自动向基类进行注册<br /><br />3.实现:<br />可以用宏来代替：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;实现原理:<br />&nbsp;&nbsp;&nbsp;&nbsp;基类里面用map管理所有需要动态创建&nbsp;【类名-创建对象的函数指针】<br />&nbsp;&nbsp;&nbsp;&nbsp;基类声明中需要添加&nbsp;DECLEAR_DYNCRT_BASE&nbsp;宏,cpp实现中要添加&nbsp;IMPLEMENT_DYNCRT_BASE&nbsp;宏<br />&nbsp;&nbsp;&nbsp;&nbsp;派生类声明中需要添加&nbsp;DECLEAR_DYNCRT_CLASS&nbsp;宏，cpp实现中要添加&nbsp;IMPLEMENT_DYNCRT_CLASS&nbsp;宏<br />&nbsp;&nbsp;&nbsp;&nbsp;派生类宏中创建了一个全局对象向基类map中注册【类名-创建对象的函数指针】<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />#include&nbsp;&lt;map&gt;<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;声明具有动态创建的基类</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;DECLEAR_DYNCRT_BASE(base)&nbsp;\<br /><span style="color: #0000FF; ">public</span>:&nbsp;\<br />typedef&nbsp;<span style="color: #0000FF; ">base</span>*&nbsp;(*ClassGen)();&nbsp;\<br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;_register(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;class_name,&nbsp;ClassGen&nbsp;class_gen)&nbsp;\<br />{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;class_set.insert(std::map&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*,&nbsp;ClassGen&gt;::value_type(class_name,&nbsp;class_gen));&nbsp;\<br />}&nbsp;\<br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">base</span>*&nbsp;create(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;class_name)&nbsp;\<br />{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;std::map&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*,&nbsp;ClassGen&gt;::iterator&nbsp;it&nbsp;=&nbsp;class_set.find(class_name);&nbsp;&nbsp;&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(it&nbsp;!=&nbsp;class_set.end())&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(it-&gt;second)();&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NULL;&nbsp;\<br />}&nbsp;\<br /><span style="color: #0000FF; ">protected</span>:&nbsp;\<br /><span style="color: #0000FF; ">static</span>&nbsp;std::map&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*,&nbsp;ClassGen&gt;&nbsp;class_set;<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;用于实现基类</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;IMPLEMENT_DYNCRT_BASE(base)&nbsp;\<br />std::map&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*,&nbsp;<span style="color: #0000FF; ">base</span>::ClassGen&gt;&nbsp;<span style="color: #0000FF; ">base</span>::class_set;<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;用于声明一个能够被动态创建的类(用一个全局对象进行注册)</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;DECLEAR_DYNCRT_CLASS(derived,&nbsp;base)&nbsp;\<br /><span style="color: #0000FF; ">public</span>:&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;derived##register&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;derived##register()&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;bRegister&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!bRegister)&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">base</span>::_register(#derived,&nbsp;_CreateObjectByName);&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRegister&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">base</span>*&nbsp;_CreateObjectByName()&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;derived;&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;用于实现一个能被动态创建的类</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;IMPLEMENT_DYNCRT_CLASS(derived)&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;derived::derived##register&nbsp;_##derived##global_object;</div><br />我们需要做的就是是哦那个这四个宏<br />附加上测试代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;测试实例:</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">class</span>&nbsp;Base<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLEAR_DYNCRT_BASE(Base)<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLEAR_DYNCRT_CLASS(Base,&nbsp;Base)<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Print()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"This&nbsp;is&nbsp;base!"&nbsp;&lt;&lt;&nbsp;std::endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /><br />IMPLEMENT_DYNCRT_BASE(Base)<br />IMPLEMENT_DYNCRT_CLASS(Base)<br /><br /><br /><span style="color: #0000FF; ">class</span>&nbsp;Derived&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Base<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLEAR_DYNCRT_CLASS(Derived,&nbsp;Base)<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Print()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"This&nbsp;is&nbsp;derived!"&nbsp;&lt;&lt;&nbsp;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br />IMPLEMENT_DYNCRT_CLASS(Derived)<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Base*&nbsp;<span style="color: #0000FF; ">base</span>&nbsp;=&nbsp;Base::create("Base");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">base</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">base</span>-&gt;Print();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;system("pause");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><br /><br />参考地址：<a href="http://blog.csdn.net/freefalcon/article/details/109275">http://blog.csdn.net/freefalcon/article/details/109275</a>&nbsp;<br /><br /><br /></div><img src ="http://www.cppblog.com/wc250en007/aggbug/188728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2012-08-30 12:15 <a href="http://www.cppblog.com/wc250en007/archive/2012/08/30/188728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++学习笔记04 成员函数指针</title><link>http://www.cppblog.com/wc250en007/archive/2012/08/02/186085.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Thu, 02 Aug 2012 15:11:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/08/02/186085.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/186085.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/08/02/186085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/186085.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/186085.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 函数指针分为一般的函数指针和成员函数指针类的非静态函数中有一个隐形的this指针，类的成员函数指针和一般的函数指针不一样1、指向一般函数的指针函数指针的声明中就包括了函数的参数类型、顺序和返回值，只能把相匹配的函数地址赋值给函数指针。为了封装同类型的函数，可以把函数指针作为通用接口函数的参数，并通过函数指针来间接调用所封装的函数。下面是一个指向函数的指针使用的例子Code highligh...&nbsp;&nbsp;<a href='http://www.cppblog.com/wc250en007/archive/2012/08/02/186085.html'>阅读全文</a><img src ="http://www.cppblog.com/wc250en007/aggbug/186085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2012-08-02 23:11 <a href="http://www.cppblog.com/wc250en007/archive/2012/08/02/186085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++学习笔记03 函数指针</title><link>http://www.cppblog.com/wc250en007/archive/2012/08/01/185839.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Wed, 01 Aug 2012 00:15:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/08/01/185839.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/185839.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/08/01/185839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/185839.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/185839.html</trackback:ping><description><![CDATA[<p>程序中不可避免的使用函数指针，各种回调，加强一下理解<br /><br />(一)定义函数指针</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #008000">//</span><span style="color: #008000">形式1：返回类型(*函数名)(参数表)</span><span style="color: #008000"><br /></span><span style="color: #000000">
<p>// PFN是函数指针<br />char (*PFN)(int);&nbsp;&nbsp;</p>
<p>char gpfn(int val)<br />{<br />&nbsp;cout &lt;&lt; val &lt;&lt; endl;<br />&nbsp;return 1;<br />}</p><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main()<br /><img id="Codehighlighter1_81_117_Open_Image" onclick="this.style.display='none'; Codehighlighter1_81_117_Open_Text.style.display='none'; Codehighlighter1_81_117_Closed_Image.style.display='inline'; Codehighlighter1_81_117_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_81_117_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_81_117_Closed_Text.style.display='none'; Codehighlighter1_81_117_Open_Image.style.display='inline'; Codehighlighter1_81_117_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_81_117_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_81_117_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;pFun&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;glFun;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">pFun)(</span><span style="color: #000000">2</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<p><br />PFN是一个函数指针 指向char(*)(int)类型的函数指针，这种函数参数是一个int,返回类型是一个char,如果要对它赋值，需要参数和返回类型一致<br /><br /><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 14px/24px 'Times New Roman'; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-converted-space">&nbsp;</span>第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。</span><font style="widows: 2; text-transform: none; text-indent: 0px; font: 14px/24px 'Times New Roman'; white-space: normal; orphans: 2; letter-spacing: normal; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" color="#ff0000"><strong>我们要从指针的层次上理解函数&#8212;&#8212;函数的函数名实际上就是一个指针，函数名指向该函数的代码在内存中的首地址。</strong></font><br /><br />（二）赋值和调用<br />赋值</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;赋值方法1&nbsp;（常用&nbsp;)</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;PFN&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;gpfn;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;函数的函数名实际上就是一个指针，函数名指向该函数的代码在内存中的首地址<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;赋值方法2</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;PFN&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">gpfn;</span></div>调用 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;调用方法1&nbsp;</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;PFN(</span><span style="color: #000000">10</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;调用方法2&nbsp;(&nbsp;常用)</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">PFN)(</span><span style="color: #000000">20</span><span style="color: #000000">);</span></div>
<p>&nbsp;</p>
<p>这两种方法都可用，C++primer上有说明 </p>
<p><br />（三）常见的函数指针的应用<br /><br />标准模板库中的排序啊， 比较啊 都会常用的函数指针<br />比如我们定义了结构体 FightAttr记录了战斗的一些数据，比如连击次数， 战斗得分... 我们只记录了每个人的FightAttr, 如何对他们排序呢<br />struct&nbsp;FightAttr<br />{<br />&nbsp;&nbsp; Combo combo;<br />&nbsp;&nbsp; Score&nbsp; score;<br />&nbsp; ....<br />};<br /><br />可以用sort&nbsp;等排序&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">template</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;RandomAccessIterator,&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Predicate</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;sort(<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RandomAccessIterator&nbsp;first,&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RandomAccessIterator&nbsp;last,&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predicate&nbsp;comp<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;);</span></div>
<p>sort允许使用自己定义的比较函数(第三个参数)</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;比较连击</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;compareCombo(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;FightAttr</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;a,&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;FightAttr</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;b)<br /><img id="Codehighlighter1_66_96_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_96_Open_Text.style.display='none'; Codehighlighter1_66_96_Closed_Image.style.display='inline'; Codehighlighter1_66_96_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_66_96_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_66_96_Closed_Text.style.display='none'; Codehighlighter1_66_96_Open_Image.style.display='inline'; Codehighlighter1_66_96_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_66_96_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_66_96_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;a.combo&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;b.combo;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;比较分数</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;compareScore(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;FightAttr</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;a,&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;FightAttr</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;b)<br /><img id="Codehighlighter1_165_194_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_194_Open_Text.style.display='none'; Codehighlighter1_165_194_Closed_Image.style.display='inline'; Codehighlighter1_165_194_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_165_194_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_165_194_Closed_Text.style.display='none'; Codehighlighter1_165_194_Open_Image.style.display='inline'; Codehighlighter1_165_194_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_165_194_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_165_194_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;a.score</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;b.score;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>
<p><br /><br /><br /><br />参考blog:</p>
<h1 style="border-bottom: #dddddd 1px solid; padding-bottom: 0px; widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 20px 0px 10px; padding-left: 0px; padding-right: 0px; font: bold 14px/24px verdana, 宋体, Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="postTitle"><a style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; text-decoration: none; padding-top: 0px" id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/ly4cn/archive/2005/11/28/286185.html">C++指针探讨 （一）数据指针</a></h1>
<p><a href="http://www.cnblogs.com/ly4cn/archive/2005/11/28/286185.html">http://www.cnblogs.com/ly4cn/archive/2005/11/28/286185.html</a><br /></p>
<h1 style="border-bottom: #dddddd 1px solid; padding-bottom: 0px; widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 20px 0px 10px; padding-left: 0px; padding-right: 0px; font: bold 14px/24px verdana, 宋体, Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="postTitle"><a style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; text-decoration: none; padding-top: 0px" id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/ly4cn/archive/2005/12/17/299007.html">C++指针探讨 (二) 函数指针</a></h1>
<p><a href="http://ly4cn.cnblogs.com/archive/2005/12/17/299007.html">http://ly4cn.cnblogs.com/archive/2005/12/17/299007.html</a><br /><br /><br />&nbsp;</p><img src ="http://www.cppblog.com/wc250en007/aggbug/185839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2012-08-01 08:15 <a href="http://www.cppblog.com/wc250en007/archive/2012/08/01/185839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++学习笔记02 VS调试和双击运行或Release的结果不一致 </title><link>http://www.cppblog.com/wc250en007/archive/2012/07/31/185716.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Tue, 31 Jul 2012 00:43:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/07/31/185716.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/185716.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/07/31/185716.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/185716.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/185716.html</trackback:ping><description><![CDATA[<div>最近调试手机游戏 调试项目OK没问题 F5运行也没问题 电脑上window平台也运行正常 结果安装到手机android平台上角色就不动了，头立刻就大了，android平台和windows平台运行结果不一致，加上手机调试困难需要通过日志来判断运行情况，怀疑过跨平台配置文件读取失败的问题,开始各种怀疑,各种验证...<br /><br />后来同事说运行打包的release版本也会出现同样的问题...<br /><br />经测试 调试时选择"运行不调试"或直接双击exe文件发现报错，由此推出F5调试和双击结果不一致,那这样的原因很明显了，原因不外乎这几条：<br /><br />1）变量没有初始化就直接拿去用了：<strong>调试程序时，强大的VS编译器会帮你做一些初始化的工作，将为初始化的变量置&#8220;0&#8221;，结构变量置为NULL等</strong>，但是在双击运行时，编译器不会这么做，因此要注意一些变量记得初始化，而且尽量少用全局变量。<br />2）&#8220;VS的编译器是极其牛X的，调试时候用的内存、堆栈等等和外部运行时候的结构稍有差异，并且正确率更高&#8212;&#8212;事实也确实如此&#8221;，因此code代码要有个良好的习惯：变量记得一定要初始化！&#8220;变量没赋值的情况下F5，debug和release是有差别的，一个版本会清零，另一个不会这么做。&#8221;<br />3）自己申请的内存，用完后记得释放，不然也可能会引起这类错误。<br />4）不要忽视调试时的warning，虽然很多时候你无视他的存在不会带来什么影响，但是某一天你会被他伤到的，他们指示你程序潜在错误的&#8220;利器&#8221;，所以尽量多的将warning消除。<br /><br /><br />我的原因就是为角色添加了一个新成员变量m_bMoveEnable 却没有初始化, 在android平台有时候初始化为false, 导致角色出生时不移动这样严重的BUG<br /><br />有人说 bool变量不是会默认初始化为xx么？ 是，可能强大的VS会在你调试的时候帮你初始化，那运行时呢？ 还有跨平台默认的初始化都是未知的...<br /><br />所以我们要养成初始化的好习惯，否则现在没有发生问题，未来的未来，可能会导致严重的BUG，而浪费我们巨大的时间去解决，甚至是无从解决...</div><img src ="http://www.cppblog.com/wc250en007/aggbug/185716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2012-07-31 08:43 <a href="http://www.cppblog.com/wc250en007/archive/2012/07/31/185716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++学习笔记01 stringstream</title><link>http://www.cppblog.com/wc250en007/archive/2012/07/31/185713.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Tue, 31 Jul 2012 00:15:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/07/31/185713.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/185713.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/07/31/185713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/185713.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/185713.html</trackback:ping><description><![CDATA[<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><strong>使用stringstream对象简化类型转换<br /></strong>C++标准库中的&lt;sstream&gt;提供了比ANSI C的&lt;stdio.h&gt;更高级的一些功能，即单纯性、类型安全和可扩展性。在本文中，我将展示怎样使用这些库来实现安全和自动的类型转换。</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><strong>为什么要学习</strong></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">如果你已习惯了&lt;stdio.h&gt;风格的转换，也许你首先会问：为什么要花额外的精力来学习基于&lt;sstream&gt;的类型转换呢？也许对下面一个简单的例子的回顾能够说服你。假设你想用sprintf()函数将一个变量从int类型转换到字符串类型。为了正确地完成这个任务，你必须确保证目标缓冲区有足够大空间以容纳转换完的字符串。此外，还必须使用正确的格式化符。如果使用了不正确的格式化符，会导致非预知的后果。下面是一个例子：</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">int n=10000;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">chars[10];</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">sprintf(s,&#8221;%d&#8221;,n);// s中的内容为&#8220;10000&#8221;<br /><br />到目前为止看起来还不错。但是，对上面代码的一个微小的改变就会使程序崩溃：<br /><br />int n=10000;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">char s[10];</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">sprintf(s,&#8221;%f&#8221;,n);// 看！错误的格式化符<br /><br /></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">在这种情况下，程序员错误地使用了%f格式化符来替代了%d。因此，<em>s</em>在调用完sprintf()后包含了一个不确定的字符串。要是能自动推导出正确的类型，那不是更好吗？<br /><br /><strong><font size="2">进入stringstream<br /><br /></font></strong><span style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; display: inline !important; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">由于</span><em style="line-height: normal; widows: 2; text-transform: none; background-color: #ffffff; font-variant: normal; text-indent: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; font-size: 13px; font-weight: normal; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">n</em><span style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; display: inline !important; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">和</span><em style="line-height: normal; widows: 2; text-transform: none; background-color: #ffffff; font-variant: normal; text-indent: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; font-size: 13px; font-weight: normal; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">s</em><span style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; display: inline !important; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">的类型在编译期就确定了，所以编译器拥有足够的信息来判断需要哪些转换。&lt;sstream&gt;库中声明的标准类就利用了这一点，自动选择所必需的转换。而且，转换结果保存在stringstream对象的内部缓冲中。你不必担心缓冲区溢出，因为这些对象会根据需要自动分配存储空间。</span><br style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><strong style="line-height: normal; widows: 2; text-transform: none; background-color: #ffffff; font-variant: normal; font-style: normal; text-indent: 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; font-size: 13px; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">你的编译器支持&lt;sstream&gt;吗？<br /><br /></strong><span style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; display: inline !important; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&lt;sstream&gt;库是最近才被列入C++标准的。（不要把&lt;sstream&gt;与标准发布前被删掉的&lt;strstream&gt;弄混了。）因此，老一点的编译器，如GCC2.95，并不支持它。如果你恰好正在使用这样的编译器而又想使用&lt;sstream&gt;的话，就要先对它进行升级更新。</span><br style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; display: inline !important; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&lt;sstream&gt;库定义了三种类：istringstream、ostringstream和stringstream，分别用来进行流的输入、输出和输入输出操作。另外，每个类都有一个对应的宽字符集版本。简单起见，我主要以stringstream为中心，因为每个转换都要涉及到输入和输出操作。</span><br style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; display: inline !important; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><strong>注意，&lt;sstream&gt;使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险</strong>。而且，传入参数和目标对象的类型被自动推导出来，即使使用了不正确的格式化符也没有危险。<br /><br /></span><br style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br /></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><strong>string到int的转换<br /><br /></strong>string result=&#8221;10000&#8221;;<br />int n=0;<br />stream&lt;&lt;result;<br />stream&gt;&gt;n;//n等于10000<br /><br /></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><strong>重复利用stringstream对象</strong></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">如果你打算在多次转换中使用同一个stringstream对象，记住再每次转换前要使用clear()方法；</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">在多次转换中重复使用同一个stringstream（而不是每次都创建一个新的对象）对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><strong>在类型转换中使用模板</strong></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">你可以轻松地定义函数模板来将一个任意的类型转换到特定的目标类型。例如，需要将各种数字值，如int、long、double等等转换成字符串，要使用以一个string类型和一个任意值<em>t</em>为参数的to_string()函数。to_string()函数将<em>t</em>转换为字符串并写入result中。使用str()成员函数来获取流内部缓冲的一份拷贝：</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">template&lt;class T&gt;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">void to_string(string &amp; result,const T&amp; t)</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">{</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;ostringstream oss;//创建一个流</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">oss&lt;&lt;t;//把值传递如流中</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">result=oss.str();//获取转换后的字符转并将其写入result<br />}<br /><br />这样，你就可以轻松地将多种数值转换成字符串了：<br /><br />to_string(s1,10.5);//double到string</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">to_string(s2,123);//int到string</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">to_string(s3,true);//bool到string<br /><br />可以更进一步定义一个通用的转换模板，用于任意类型之间的转换。函数模板convert()含有两个模板参数out_type和in_value，功能是将in_value值转换成out_type类型：<br /><br />template&lt;class out_type,class in_value&gt;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">out_type convert(const in_value &amp; t)</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">{</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">stringstream stream;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">stream&lt;&lt;t;//向流中传值</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">out_type result;//这里存储转换结果</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">stream&gt;&gt;result;//向result中写入值</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">return result;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">}</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">这样使用convert()：</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">double d;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">string salary;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">string s=&#8221;12.56&#8221;;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">d=convert&lt;double&gt;(s);//d等于12.56</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">salary=convert&lt;string&gt;(9000.0);//salary等于&#8221;9000&#8221;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br /></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br /><strong>结论</strong></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">在过去留下来的程序代码和纯粹的C程序中，传统的&lt;stdio.h&gt;形式的转换伴随了我们很长的一段时间。但是，如文中所述，基于stringstream的转换拥有类型安全和不会溢出这样抢眼的特性，使我们有充足得理由抛弃&lt;stdio.h&gt;而使用&lt;sstream&gt;。&lt;sstream&gt;库还提供了另外一个特性&#8212;可扩展性。你可以通过重载来支持自定义类型间的转换。<br /><br /><strong>一些实例：</strong><br /><br /></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">stringstream通常是用来做数据转换的。</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">相比c库的转换，它更加安全，自动和直接。</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">例子一：基本数据类型转换例子 int转string</p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">sstream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()<br /><img id="Codehighlighter1_70_280_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_280_Open_Text.style.display='none'; Codehighlighter1_70_280_Closed_Image.style.display='inline'; Codehighlighter1_70_280_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_70_280_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_70_280_Closed_Text.style.display='none'; Codehighlighter1_70_280_Open_Image.style.display='inline'; Codehighlighter1_70_280_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_70_280_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_70_280_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;std::stringstream&nbsp;stream;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;result;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;i;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将int输入流</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;result;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">从stream中抽取前面插入的int值</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;result&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;std::endl;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;print&nbsp;the&nbsp;string&nbsp;"1000"</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000">&nbsp;</span></div>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br /><br /><span style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; display: inline !important; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">例子二：除了基本类型的转换，也支持char *的转换。</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">sstream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()<br /><img id="Codehighlighter1_52_238_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_238_Open_Text.style.display='none'; Codehighlighter1_52_238_Closed_Image.style.display='inline'; Codehighlighter1_52_238_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_52_238_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_52_238_Closed_Text.style.display='none'; Codehighlighter1_52_238_Open_Image.style.display='inline'; Codehighlighter1_52_238_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_52_238_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_52_238_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;std::stringstream&nbsp;stream;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;result[</span><span style="color: #000000">8</span><span style="color: #000000">]&nbsp;;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">8888</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">向stream中插入8888</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;result;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">抽取stream中的值到result</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;result&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;std::endl;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;屏幕显示&nbsp;"8888"</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000">&nbsp;</span></div>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br /><span style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; display: inline !important; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">例子三：再进行多次转换的时候，必须调用stringstream的成员函数str("")<br /></span></p>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">sstream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()<br /><img id="Codehighlighter1_50_537_Open_Image" onclick="this.style.display='none'; Codehighlighter1_50_537_Open_Text.style.display='none'; Codehighlighter1_50_537_Closed_Image.style.display='inline'; Codehighlighter1_50_537_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_50_537_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_50_537_Closed_Text.style.display='none'; Codehighlighter1_50_537_Open_Image.style.display='inline'; Codehighlighter1_50_537_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_50_537_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_50_537_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;std::stringstream&nbsp;stream;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;first,&nbsp;second;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">456</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">插入字符串</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;first;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">转换成int</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;first&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;std::endl;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;This&nbsp;copies&nbsp;an&nbsp;empty&nbsp;string&nbsp;into&nbsp;ss,&nbsp;erasing&nbsp;the<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;previous&nbsp;contents.</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;This&nbsp;clears&nbsp;the&nbsp;'eof'&nbsp;flag.&nbsp;&nbsp;Otherwise,&nbsp;even&nbsp;after&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;writing&nbsp;new&nbsp;data&nbsp;to&nbsp;ss&nbsp;we&nbsp;wouldn't&nbsp;be&nbsp;able&nbsp;to<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;read&nbsp;from&nbsp;it.</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss.clear();&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">插入bool值</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;second;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">提取出int</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;second&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;std::endl;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span><span style="color: #000000">&nbsp;</span></div>
<p style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; margin: 0px 0px 14px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br />原文地址：<br /><a style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #1d58d1; word-spacing: 0px; text-decoration: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" href="http://www.builder.com.cn/2003/0304/83250.shtml"><span style="font-size: 8pt">http://www.builder.com.cn/2003/0304/83250.shtml</span></a><br style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><a style="widows: 2; text-transform: none; background-color: #ffffff; text-indent: 0px; font: 13px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #1d58d1; word-spacing: 0px; text-decoration: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" href="http://www.cppblog.com/alantop/archive/2007/07/10/27823.html"><span style="font-size: 8pt">http://www.cppblog.com/alantop/archive/2007/07/10/27823.html</span></a><br /><br /><br />----------------------------------------------------------华丽丽的分割线-------------------------------------------------------------------------------<br /><br /><br /><br /><br /></p><img src ="http://www.cppblog.com/wc250en007/aggbug/185713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2012-07-31 08:15 <a href="http://www.cppblog.com/wc250en007/archive/2012/07/31/185713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断路径文件夹是否存在,不存在创建</title><link>http://www.cppblog.com/wc250en007/archive/2012/03/24/168794.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Sat, 24 Mar 2012 07:12:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/03/24/168794.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/168794.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/03/24/168794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/168794.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/168794.html</trackback:ping><description><![CDATA[C/C++判断一个文件是否存在<br />1.<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_41_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_140_Open_Text.style.display='none'; Codehighlighter1_41_140_Closed_Image.style.display='inline'; Codehighlighter1_41_140_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_41_140_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_140_Closed_Text.style.display='none'; Codehighlighter1_41_140_Open_Image.style.display='inline'; Codehighlighter1_41_140_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;isExistFile(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pszFileName)</span><span id="Codehighlighter1_41_140_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_41_140_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">fp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fopen(pszFileName,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">rb</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(fp&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>或<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_41_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_139_Open_Text.style.display='none'; Codehighlighter1_41_139_Closed_Image.style.display='inline'; Codehighlighter1_41_139_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_41_139_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_139_Closed_Text.style.display='none'; Codehighlighter1_41_139_Open_Image.style.display='inline'; Codehighlighter1_41_139_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;isExistFile(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pszFileName)</span><span id="Codehighlighter1_41_139_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_41_139_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fstream&nbsp;file;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.open(pszFileName,ios::</span><span style="color: #0000ff">in</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">file)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><br />2.<span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; color: rgb(51,51,51); line-height: 26px; font-family: Arial; text-align: left">利用 c 语言的库的办法： 
<p>函数名: access<br /></p></span></span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;crt_access.c</span><span style="color: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">#include&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">io.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">stdio.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">stdlib.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;)<br /><img id="Codehighlighter1_92_425_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_425_Open_Text.style.display='none'; Codehighlighter1_92_425_Closed_Image.style.display='inline'; Codehighlighter1_92_425_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_92_425_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_92_425_Closed_Text.style.display='none'; Codehighlighter1_92_425_Open_Image.style.display='inline'; Codehighlighter1_92_425_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_92_425_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_92_425_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_97_121_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_121_Open_Text.style.display='none'; Codehighlighter1_97_121_Closed_Image.style.display='inline'; Codehighlighter1_97_121_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_97_121_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_97_121_Closed_Text.style.display='none'; Codehighlighter1_97_121_Open_Image.style.display='inline'; Codehighlighter1_97_121_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_97_121_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_97_121_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;Check&nbsp;for&nbsp;existence&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(&nbsp;(_access(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">crt_ACCESS.C</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;))&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;)<br /><img id="Codehighlighter1_172_423_Open_Image" onclick="this.style.display='none'; Codehighlighter1_172_423_Open_Text.style.display='none'; Codehighlighter1_172_423_Closed_Image.style.display='inline'; Codehighlighter1_172_423_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_172_423_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_172_423_Closed_Text.style.display='none'; Codehighlighter1_172_423_Open_Image.style.display='inline'; Codehighlighter1_172_423_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_172_423_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_172_423_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">File&nbsp;crt_ACCESS.C&nbsp;exists\n</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br /><img id="Codehighlighter1_227_258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_227_258_Open_Text.style.display='none'; Codehighlighter1_227_258_Closed_Image.style.display='inline'; Codehighlighter1_227_258_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_227_258_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_227_258_Closed_Text.style.display='none'; Codehighlighter1_227_258_Open_Image.style.display='inline'; Codehighlighter1_227_258_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_227_258_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_227_258_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;Check&nbsp;for&nbsp;write&nbsp;permission&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_266_295_Open_Image" onclick="this.style.display='none'; Codehighlighter1_266_295_Open_Text.style.display='none'; Codehighlighter1_266_295_Closed_Image.style.display='inline'; Codehighlighter1_266_295_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_266_295_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_266_295_Closed_Text.style.display='none'; Codehighlighter1_266_295_Open_Image.style.display='inline'; Codehighlighter1_266_295_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_266_295_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_266_295_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;assume&nbsp;file&nbsp;is&nbsp;read-only&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(&nbsp;(_access(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">crt_ACCESS.C</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;))&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">File&nbsp;crt_ACCESS.C&nbsp;does&nbsp;not&nbsp;have&nbsp;write&nbsp;permission\n</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div><br />3.用FindFirstFile<br /><br /><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">windows.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">vector</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;核查目录，若目录不存在，创建目录</span><span style="color: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;FindOrCreateDirectory(&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszPath&nbsp;)<br /><img id="Codehighlighter1_151_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_151_574_Open_Text.style.display='none'; Codehighlighter1_151_574_Closed_Image.style.display='inline'; Codehighlighter1_151_574_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_151_574_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_151_574_Closed_Text.style.display='none'; Codehighlighter1_151_574_Open_Image.style.display='inline'; Codehighlighter1_151_574_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_151_574_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_151_574_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;WIN32_FIND_DATA&nbsp;fd;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hFind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;::FindFirstFile(&nbsp;pszPath,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">fd&nbsp;);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(&nbsp;hFind&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;INVALID_HANDLE_VALUE&nbsp;)<br /><img id="Codehighlighter1_264_339_Open_Image" onclick="this.style.display='none'; Codehighlighter1_264_339_Open_Text.style.display='none'; Codehighlighter1_264_339_Closed_Image.style.display='inline'; Codehighlighter1_264_339_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_264_339_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_264_339_Closed_Text.style.display='none'; Codehighlighter1_264_339_Open_Image.style.display='inline'; Codehighlighter1_264_339_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_264_339_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_264_339_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;fd.dwFileAttributes&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;FILE_ATTRIBUTE_DIRECTORY&nbsp;)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">::CreateDirectory(&nbsp;pszPath,&nbsp;NULL&nbsp;)&nbsp;)<br /><img id="Codehighlighter1_387_557_Open_Image" onclick="this.style.display='none'; Codehighlighter1_387_557_Open_Text.style.display='none'; Codehighlighter1_387_557_Closed_Image.style.display='inline'; Codehighlighter1_387_557_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_387_557_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_387_557_Closed_Text.style.display='none'; Codehighlighter1_387_557_Open_Image.style.display='inline'; Codehighlighter1_387_557_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_387_557_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_387_557_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;szDir[MAX_PATH];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf_s(&nbsp;szDir,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(szDir),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">创建目录[%s]失败,请检查权限</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pszPath&nbsp;);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::MessageBox(&nbsp;NULL,&nbsp;szDir,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">创建目录失败</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;MB_OK</span><span style="color: #000000">|</span><span style="color: #000000">MB_ICONERROR&nbsp;);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;遍历目录</span><span style="color: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;CheckDirectory(&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszPath&nbsp;)<br /><img id="Codehighlighter1_622_1198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_622_1198_Open_Text.style.display='none'; Codehighlighter1_622_1198_Closed_Image.style.display='inline'; Codehighlighter1_622_1198_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_622_1198_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_622_1198_Closed_Text.style.display='none'; Codehighlighter1_622_1198_Open_Image.style.display='inline'; Codehighlighter1_622_1198_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_622_1198_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_622_1198_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;std::</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;vtPath;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;sep&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">\\/</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;next_token;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;token&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;strtok_s(&nbsp;pszPath,&nbsp;sep,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">next_token);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(&nbsp;token&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;NULL&nbsp;)<br /><img id="Codehighlighter1_782_858_Open_Image" onclick="this.style.display='none'; Codehighlighter1_782_858_Open_Text.style.display='none'; Codehighlighter1_782_858_Closed_Image.style.display='inline'; Codehighlighter1_782_858_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_782_858_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_782_858_Closed_Text.style.display='none'; Codehighlighter1_782_858_Open_Image.style.display='inline'; Codehighlighter1_782_858_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_782_858_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_782_858_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtPath.push_back(&nbsp;token&nbsp;);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strtok_s(NULL,&nbsp;sep,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">next_token);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;vtPath.size()&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;)<br /><img id="Codehighlighter1_888_952_Open_Image" onclick="this.style.display='none'; Codehighlighter1_888_952_Open_Text.style.display='none'; Codehighlighter1_888_952_Closed_Image.style.display='inline'; Codehighlighter1_888_952_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_888_952_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_888_952_Closed_Text.style.display='none'; Codehighlighter1_888_952_Open_Image.style.display='inline'; Codehighlighter1_888_952_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_888_952_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_888_952_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;vtPath[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtPath.erase(&nbsp;vtPath.begin()&nbsp;);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;核查所有路径是否存在</span><span style="color: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strCurPath;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(&nbsp;size_t&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">)vtPath.size();&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">i&nbsp;)<br /><img id="Codehighlighter1_1047_1181_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1047_1181_Open_Text.style.display='none'; Codehighlighter1_1047_1181_Closed_Image.style.display='inline'; Codehighlighter1_1047_1181_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1047_1181_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1047_1181_Closed_Text.style.display='none'; Codehighlighter1_1047_1181_Open_Image.style.display='inline'; Codehighlighter1_1047_1181_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1047_1181_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1047_1181_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strCurPath&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;vtPath[i];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strCurPath&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">\\</span><span style="color: #000000">'</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">FindOrCreateDirectory(&nbsp;strCurPath.c_str()&nbsp;)&nbsp;)<br /><img id="Codehighlighter1_1157_1178_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1157_1178_Open_Text.style.display='none'; Codehighlighter1_1157_1178_Closed_Image.style.display='inline'; Codehighlighter1_1157_1178_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1157_1178_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1157_1178_Closed_Text.style.display='none'; Codehighlighter1_1157_1178_Open_Image.style.display='inline'; Codehighlighter1_1157_1178_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1157_1178_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1157_1178_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;<br /><img id="Codehighlighter1_1214_1346_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1214_1346_Open_Text.style.display='none'; Codehighlighter1_1214_1346_Closed_Image.style.display='inline'; Codehighlighter1_1214_1346_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_1214_1346_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1214_1346_Closed_Text.style.display='none'; Codehighlighter1_1214_1346_Open_Image.style.display='inline'; Codehighlighter1_1214_1346_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_1214_1346_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1214_1346_Open_Text"><span style="color: #000000">{&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;szPath[MAX_PATH]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">./main\\test\\hello/jump\\test\\</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;CheckDirectory(&nbsp;szPath&nbsp;);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000">"</span><span style="color: #000000">pause</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;</span></div><img src ="http://www.cppblog.com/wc250en007/aggbug/168794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2012-03-24 15:12 <a href="http://www.cppblog.com/wc250en007/archive/2012/03/24/168794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MiniCode</title><link>http://www.cppblog.com/wc250en007/archive/2011/12/14/162072.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Wed, 14 Dec 2011 00:11:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2011/12/14/162072.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/162072.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2011/12/14/162072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/162072.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/162072.html</trackback:ping><description><![CDATA[<p>bool StringEqual( const char* p,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char* tag,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool ignoreCase<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*TiXmlEncoding encoding */)<br />{<br />&nbsp;assert( p );<br />&nbsp;assert( tag );<br />&nbsp;if ( !p || !*p )<br />&nbsp;{<br />&nbsp;&nbsp;assert( 0 );<br />&nbsp;&nbsp;return false;<br />&nbsp;}</p>
<p>&nbsp;const char* q = p;</p>
<p>&nbsp;if ( ignoreCase )<br />&nbsp;{<br />&nbsp;&nbsp;while ( *q &amp;&amp; *tag &amp;&amp; tolower( *q ) == tolower( *tag ) )<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;++q;<br />&nbsp;&nbsp;&nbsp;++tag;<br />&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;if ( *tag == 0 )<br />&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;}<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;while ( *q &amp;&amp; *tag &amp;&amp; *q == *tag )<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;++q;<br />&nbsp;&nbsp;&nbsp;++tag;<br />&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;if ( *tag == 0 )&nbsp;&nbsp;// Have we found the end of the tag, and everything equal?<br />&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;}<br />&nbsp;return false;<br />}<br /><br />2.读取文件</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;line;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ifstream&nbsp;input(</span><span style="color: #000000">"</span><span style="color: #000000">input.txt</span><span style="color: #000000">"</span><span style="color: #000000">,ios::</span><span style="color: #0000ff">in</span><span style="color: #000000">);&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;<br /><img id="Codehighlighter1_67_122_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_122_Open_Text.style.display='none'; Codehighlighter1_67_122_Closed_Image.style.display='inline'; Codehighlighter1_67_122_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_67_122_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_67_122_Closed_Text.style.display='none'; Codehighlighter1_67_122_Open_Image.style.display='inline'; Codehighlighter1_67_122_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_67_122_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_67_122_Open_Text"><span style="color: #000000">{&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getline(input,line);&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(input.eof())&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;input.close();&nbsp;</span></div>
<p>&nbsp;</p><img src ="http://www.cppblog.com/wc250en007/aggbug/162072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2011-12-14 08:11 <a href="http://www.cppblog.com/wc250en007/archive/2011/12/14/162072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>删除容器元素致迭代器失效</title><link>http://www.cppblog.com/wc250en007/archive/2011/11/08/159830.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Tue, 08 Nov 2011 09:33:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2011/11/08/159830.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/159830.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2011/11/08/159830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/159830.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/159830.html</trackback:ping><description><![CDATA[遍历一个容器同时删除这个容器的迭代器，会使这个容器失效<br />来看下什么是迭代器， 任何特定的迭代器都是某个类型的对象,vectorr的迭代器可以被实现为一个到vector的指针，加一个下标<br />表的迭代器可以是一个指向链表的指针, 所有迭代器的共同之处在于它们的语义，以及它们的有关操作的名字。<br />eg.迭代器++操作总是产生引用下一个元素的迭代器， *总是产生这个迭代器引用的那个元素,基本上符合这些的都可以成为迭代器了<br /><br />常用的遍历删除迭代器方法，拿map举例<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;map</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;mp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;map</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::iterator&nbsp;iter&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mp.begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(&nbsp;iter&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;mp.end()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(&nbsp;iter</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">first&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp.erase(&nbsp;</span><span style="color: red; ">iter</span><span style="color: red; ">++</span><span style="color: #000000; ">&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">iter;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>在删除时记录下下一个有效的迭代器就OK了<br /><br />如果用同样的方法使用在vector上就崩了，这个是为什么呢<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;vec;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">20</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec.push_back(&nbsp;i&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::iterator&nbsp;it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;vec.begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(&nbsp;it&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;vec.end()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">it&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red; ">&nbsp;vec.erase(&nbsp;it</span><span style="color: red; ">++</span><span style="color: red; ">&nbsp;); &nbsp; &nbsp; &nbsp;// 导致崩溃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #0000FF; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">it;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><br />这是因为vector和list,map删除迭代器后结果不一样, 因为map, list删除迭代器后，只有当前删除的迭代器无效， it++就可以获得下一个有效的迭代器了,但是vector 删除迭代器后，<br />当前删除的迭代器之后的所有迭代器都会失效<br /><br />正确方法<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">windows.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">map</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">list</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">vector</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /><br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;gt_val(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;val&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;val</span><span style="color: #000000; ">%</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;vec;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">20</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec.push_back(&nbsp;i&nbsp;);<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; ">&nbsp;标准库调用方法</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::iterator&nbsp;it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;vec.begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(&nbsp;(it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;find_if(&nbsp;it,&nbsp;vec.end(),&nbsp;gt_val))</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;vec.end()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;vec.erase(&nbsp;it&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;普通调用方法</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;vec.begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(&nbsp;it&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;vec.end()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">it&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red; ">&nbsp;it&nbsp;</span><span style="color: red; ">=</span><span style="color: red; ">&nbsp;vec.erase(&nbsp;it&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #0000FF; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">it;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;map</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;mp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mp[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;map</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">::iterator&nbsp;iter&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mp.begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(&nbsp;iter&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;mp.end()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(&nbsp;iter</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">first&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red; ">&nbsp;&nbsp;iter&nbsp;</span><span style="color: red; ">=</span><span style="color: red; ">&nbsp;mp.erase(&nbsp;iter&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #0000FF; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">iter;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</span></div><br /><img src ="http://www.cppblog.com/wc250en007/aggbug/159830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2011-11-08 17:33 <a href="http://www.cppblog.com/wc250en007/archive/2011/11/08/159830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++多线程编程</title><link>http://www.cppblog.com/wc250en007/archive/2011/08/14/153338.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Sun, 14 Aug 2011 04:37:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2011/08/14/153338.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/153338.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2011/08/14/153338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/153338.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/153338.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; line-height: 24px; font-family: Arial, 宋体; text-align: left"> 
<p style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px 0px 12px; padding-top: 0px; border-right-width: 0px">一个<strong>进程</strong>通常定义为程序的一个实例。在Win32中， 进程占据4GB的地址空间。与它们在MS-DOS和16位Windows操作系统中不同， Win32进程是没有活力的。这就是说，一个Win32进程并不执行什么指令，它只是占据着4GB的地址空间，此空间中有应用程序EXE文件的 代码和数据。EXE需要的任意DLL也将它们的代码和数据装入到进程的地址空间。除了地址空间，进程还占有某些资源，比如文件、动态内存分配和线程。当进程终止时，在它生命期中创建的各种资源将被清除。</p>
<p style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px 0px 12px; padding-top: 0px; border-right-width: 0px">　　但是进程是没有活力的，它只是一个静态的概念。为了让进程完成一些工作，进程必须至少占有一个线程，所以线程是描述进程内的执行，正是线程负责执行包含在进程的地址空间中的代码。实际上，单个进程可以包含几个线程， 它们可以同时执行进程的地址空间中的代码。为了做到这一点，每个线程有自己的一组CPU寄存器和堆栈。</p>
<p style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px 0px 12px; padding-top: 0px; border-right-width: 0px">　　线程是进程内部的一个执行单元。系统创建好进程后，实际上就启动执行了该进程的主执行线程，主执行线程以函数地址形式，比如说main或WinMain函数，将程序的启动点提供给Windows系统。主执行线程终止了，进程也就随之终止。</p>
<p style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px 0px 12px; padding-top: 0px; border-right-width: 0px">　　每一个进程至少有一个主执行线程，它无需由用户去主动创建，是由系统自动创建的。用户根据需要在应用程序中创建其它线程，多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中，共同使用这些虚拟地址空间、全局变量和系统资源，所以线程间的通讯非常方便，多线程技术的应用也较为广泛。</p>
<p style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px 0px 12px; padding-top: 0px; border-right-width: 0px">　　多线程可以实现并行处理，避免了某项任务长时间占用CPU时间。要说明的一点是，目前大多数的计算机都是单处理器(CPU)的，为了运行所有这些线程，操作系统为每个独立线程安排一些CPU时间，操作系统以轮换方式向线程提供时间片，这就给人一种假象，好象这些线程都在同时运行。由此可见，如果两个非常活跃的线程为了抢夺对CPU的控制权，在线程切换时会消耗很多的CPU资源，反而会降低系统的性能。这一点在多线程编程时应该注意。</p>
<p style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px 0px 12px; padding-top: 0px; border-right-width: 0px">　　现代操作系统大都提供了相应的机制，用来处理线程的生存期、同步，以及其他&#8220;和线程有关&#8221;的属性，如优先级、线程专有存储空间(thread-specific storage)等。多线程编程是一门语言的难点和重点</p></span></span><img src ="http://www.cppblog.com/wc250en007/aggbug/153338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2011-08-14 12:37 <a href="http://www.cppblog.com/wc250en007/archive/2011/08/14/153338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己常用VS配置</title><link>http://www.cppblog.com/wc250en007/archive/2011/04/26/145022.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Tue, 26 Apr 2011 01:43:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2011/04/26/145022.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/145022.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2011/04/26/145022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/145022.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/145022.html</trackback:ping><description><![CDATA[字体 consolas<br />关键字 青色<br />字符串 红色<br />标识符 银色<br />预处理关键字&nbsp; 洋红色<br /><br />VA插件 宏颜色 804000 米色<br />&nbsp;注释/** 
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_82_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_82_Open_Text.style.display='none'; Codehighlighter1_0_82_Closed_Image.style.display='inline'; Codehighlighter1_0_82_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_0_82_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_82_Closed_Text.style.display='none'; Codehighlighter1_0_82_Open_Image.style.display='inline'; Codehighlighter1_0_82_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top"><span id="Codehighlighter1_0_82_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_82_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />@-----added&nbsp;by&nbsp;Teng&nbsp;at&nbsp;[$MONTH$/$DAY$/$YEAR$]<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />@DSC:&nbsp;&nbsp;&nbsp;$end$<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />@param:&nbsp;<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />@return:<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #008000">*/</span></span><span style="color: #000000">&nbsp;</span></div><br /><br /><br />快捷键////
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_166_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_166_Open_Text.style.display='none'; Codehighlighter1_0_166_Closed_Image.style.display='inline'; Codehighlighter1_0_166_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_0_166_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_166_Closed_Text.style.display='none'; Codehighlighter1_0_166_Open_Image.style.display='inline'; Codehighlighter1_0_166_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top"><span id="Codehighlighter1_0_166_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_166_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />Copyright&nbsp;(c)&nbsp;2010<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />Module&nbsp;Name:<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;$FILE_BASE$.h<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;$FILE_BASE$.cpp<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />Author:&nbsp;added&nbsp;by&nbsp;Teng&nbsp;at&nbsp;[$MONTH$/$DAY$/$YEAR$]<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />Abstract:<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;1.$end$<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />Revis ion&nbsp;History:<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;<img alt="" src="http://www.cppblog.com/Images/dot.gif" /><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br />#ifdef guard in a header<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">#ifndef&nbsp;__$FILE_BASE$_h__<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;__$FILE_BASE$_h__</span><span style="color: #000000"><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />$selected$<br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">#endif</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;__$FILE_BASE$_h__</span><span style="color: #000000"><br /><img alt="" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><img src ="http://www.cppblog.com/wc250en007/aggbug/145022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2011-04-26 09:43 <a href="http://www.cppblog.com/wc250en007/archive/2011/04/26/145022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>for_each的用法</title><link>http://www.cppblog.com/wc250en007/archive/2011/04/18/144455.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Mon, 18 Apr 2011 05:11:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2011/04/18/144455.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/144455.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2011/04/18/144455.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/144455.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/144455.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文地址：http://blog.csdn.net/hionceshine/archive/2008/11/19/3336318.aspxAbstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL)&nbsp;曾經討論過for_each()，不過當時功力尚淺，只談到了皮毛而已，這次看了effective STL的item 41、43後，對f...&nbsp;&nbsp;<a href='http://www.cppblog.com/wc250en007/archive/2011/04/18/144455.html'>阅读全文</a><img src ="http://www.cppblog.com/wc250en007/aggbug/144455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2011-04-18 13:11 <a href="http://www.cppblog.com/wc250en007/archive/2011/04/18/144455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sprintf使用</title><link>http://www.cppblog.com/wc250en007/archive/2011/02/17/140204.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Thu, 17 Feb 2011 02:35:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2011/02/17/140204.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/140204.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2011/02/17/140204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/140204.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/140204.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium 'Times New Roman'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; TEXT-ALIGN: center; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 12px; COLOR: rgb(146,146,146); FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-ALIGN: left">
<div class=multicntwrap>&nbsp;</div>
<div class="bct fc05 fc11 nbw-blog ztag js-fs2" style="PADDING-RIGHT: 0px; OVERFLOW-Y: hidden; PADDING-LEFT: 0px; FONT-SIZE: 14px; OVERFLOW-X: hidden; PADDING-BOTTOM: 5px; MARGIN: 15px 0px; COLOR: rgb(146,146,146); LINE-HEIGHT: 22px; PADDING-TOP: 5px; TEXT-ALIGN: left; WORD-WRAP: break-word">&nbsp;&nbsp; &nbsp;对于熟悉C的人来说,sprintf并不陌生,在很多情况下,一般都会使用sprintf来代替itoa.sprintf函数的原型是:
<div style="LINE-HEIGHT: 22px">int sprintf(char* str, const char* format, ...);</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;除了前两个参数类型固定外,后面可以接任意多个参数,格式化输出一个字符串:</div>
<div style="LINE-HEIGHT: 22px">1) 整数格式化输出</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;如果要将数字 3915 保存到字符串str中/*假定字符串够长,以下都是为这样*/.</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%d",3915);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "3915" &nbsp;这是最基本的输出</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%5d",3915);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// " 3915" 右对齐,相当于C++中的制表符,如数字没有5位时左另用空格补满.</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%05d",3915);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "03915"右对齐,相当于C++中的制表符,如数字没有5位时左另用'0'补满</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%3d",3915);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "3915", 如果数字长度超出时,输出完整的数字</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%-5d",3915);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "3915 " 左对齐,如数字没有5位时左另用空格补满,超出时输出所有数字</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;对于十六进制也类同于十进制</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(s, "%5x", 3915);<span class=Apple-converted-space>&nbsp;</span><span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// " &nbsp;f4b"右对齐,小写16 进制,宽度占5 个位置</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(s, "%5X", 3915);&nbsp;<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// " &nbsp;F4B"右对齐,大写16 进制,宽度占5 个位置</div>
<div style="LINE-HEIGHT: 22px"><br style="LINE-HEIGHT: 22px"></div>
<div style="LINE-HEIGHT: 22px">2) 浮点数格式化输出</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;如果要将浮点数字 3.915 保存到字符串str中</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%f",3.915);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "3.915" 这是最基本的输出,显示完整的数字</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%.2f",3.915);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "3.92" 保留二位小数,注意的一点是,这里是四舍五入,面不是像取整那样丢掉小数位.但还存在一个问题,就是当前面的整数部分数据大时,也有可能直接丢掉后面位.</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;</div>
<div style="LINE-HEIGHT: 22px">对于数字转字符串还有一个要注意的问题,就是后面数字的类型不一值的时候就可能得不到你想要的结果,需要强制转换一下,如:</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;int ii = 3915;</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%f",ii);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// 这样你就会遇到传闻中的R6002,float point not load 的错误,我在VS中写C++命令行程序,直接一闪而过,断点之类的都没用.可以改成:</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%f",(float)ii);<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// 这样就正常以浮点输出了&nbsp;&nbsp;&nbsp;</div>
<div style="LINE-HEIGHT: 22px"><br style="LINE-HEIGHT: 22px"></div>
<div style="LINE-HEIGHT: 22px">3) 字符串的格式化输出</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;如果要将字符串"guoke"保存到字符串str中</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%s","guoke");<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "guoke"最基本的,直接copy</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%6s","guoke");<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// " guoke" 右对齐,超出时,输出全部字符串</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%.3s","guoke");<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// " guo" &nbsp; 只读取字前三个字符,如果字符串不足3个取全部</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%-6s","guoke");<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// &nbsp;"guoke " 左对齐,超出时,输出全部字符串</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%6.3s","guoke");<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// " &nbsp; guo" 右对齐,宽宽6,只取字符串前3个字符.如果字符串不足3个取全部</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%-6.3s","guoke");<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "guo &nbsp; " 左对齐,宽宽6,只取字符串前3个字符.如果字符串不足3个取全部</div>
<div style="LINE-HEIGHT: 22px">&nbsp;&nbsp; &nbsp;sprintf(str,"%3.6s","guoke");<span style="LINE-HEIGHT: 22px; WHITE-SPACE: pre"> </span>// "guoke" 这样感觉好像没什么大的作用,当所取的字符串长度大于3是还是会输出全部字符串的.</div>
</div>
</span></span>
<img src ="http://www.cppblog.com/wc250en007/aggbug/140204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2011-02-17 10:35 <a href="http://www.cppblog.com/wc250en007/archive/2011/02/17/140204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏消息效率之switch...case &amp;&amp; if...else </title><link>http://www.cppblog.com/wc250en007/archive/2010/12/18/136841.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Sat, 18 Dec 2010 10:41:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2010/12/18/136841.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/136841.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2010/12/18/136841.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/136841.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/136841.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium 'Times New Roman'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 14px; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left">
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">游戏中接受到的消息那叫一个多如牛毛啊，这就涉及到switch case接受还是if else接受的效率问题<br>有人说这是个小问题，哈哈 精益求精吗<br><br>看到了一篇两者效率比较的文章：<br><br><br>switch...case与if...else的根本区别在于，switch...case会生成一个跳转表来指示实际的case分支的地址，而这个跳转表的索引号与switch变量的值是相等的。从而，switch...case不用像if...else那样遍历条件分支直到命中条件，而只需访问对应索引号的表项从而到达定位分支的目的。</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">具体地说，switch...case会生成一份大小（表项数）为最大case常量＋1的跳表，程序首先判断switch变量是否大于最大case常量，若大于，则跳到default分支处理；否则取得索引号为switch变量大小的跳表项的地址（即跳表的起始地址＋表项大小＊索引号），程序接着跳到此地址执行，到此完成了分支的跳转。如下代码（gcc编译，不开优化）：</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">int main()<br>{<br>&nbsp;&nbsp;&nbsp; int j = 0;<br>&nbsp;&nbsp;&nbsp; int i = 1;<br><br>&nbsp;&nbsp;&nbsp; switch (i)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 1:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; j = 11;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 2:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; j = 22;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 3:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; j = 33;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 4:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; j = 44;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 10:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; j = 10;<br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; j = 88;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; return 0;<br>}</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">这是编译后的部分汇编码：</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">&nbsp;&nbsp;&nbsp; .file&nbsp;&nbsp;&nbsp; "test.c"<br>&nbsp;&nbsp;&nbsp; .text<br>.globl main<br>&nbsp;&nbsp;&nbsp; .type&nbsp;&nbsp;&nbsp; main, @function<br>main:<br>&nbsp;&nbsp;&nbsp; leal&nbsp;&nbsp;&nbsp; 4(%esp), %ecx<br>&nbsp;&nbsp;&nbsp; andl&nbsp;&nbsp;&nbsp; $-16, %esp<br>&nbsp;&nbsp;&nbsp; pushl&nbsp;&nbsp;&nbsp; -4(%ecx)<br>&nbsp;&nbsp;&nbsp; pushl&nbsp;&nbsp;&nbsp; %ebp<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; %esp, %ebp<br>&nbsp;&nbsp;&nbsp; pushl&nbsp;&nbsp;&nbsp; %ecx<br>&nbsp;&nbsp;&nbsp; subl&nbsp;&nbsp;&nbsp; $16, %esp<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $0, -8(%ebp)<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $1, -12(%ebp)<br>&nbsp;&nbsp;&nbsp; cmpl&nbsp;&nbsp;&nbsp; $10, -12(%ebp)<br>&nbsp;&nbsp;&nbsp; ja&nbsp;&nbsp;&nbsp; .L2<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; -12(%ebp), %eax<br>&nbsp;&nbsp;&nbsp; sall&nbsp;&nbsp;&nbsp; $2, %eax<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; .L8(%eax), %eax<br>&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; *%eax<br>&nbsp;&nbsp;&nbsp; .section&nbsp;&nbsp;&nbsp; .rodata<br>&nbsp;&nbsp;&nbsp; .align 4<br>&nbsp;&nbsp;&nbsp; .align 4<br>.L8:<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L2<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L3<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L4<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L5<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L6<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L2<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L2<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L2<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L2<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L2<br>&nbsp;&nbsp;&nbsp; .long&nbsp;&nbsp;&nbsp; .L7<br>&nbsp;&nbsp;&nbsp; .text<br>.L3:<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $11, -8(%ebp)<br>&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; .L9<br>.L4:<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $22, -8(%ebp)<br>&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; .L9<br>.L5:<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $33, -8(%ebp)<br>&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; .L9<br>.L6:<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $44, -8(%ebp)<br>&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp; .L9<br>.L7:<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $10, -8(%ebp)<br>.L2:<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $88, -8(%ebp)<br>.L9:<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $0, %eax<br>&nbsp;&nbsp;&nbsp; addl&nbsp;&nbsp;&nbsp; $16, %esp<br>&nbsp;&nbsp;&nbsp; popl&nbsp;&nbsp;&nbsp; %ecx<br>&nbsp;&nbsp;&nbsp; popl&nbsp;&nbsp;&nbsp; %ebp<br>&nbsp;&nbsp;&nbsp; leal&nbsp;&nbsp;&nbsp; -4(%ecx), %esp<br>&nbsp;&nbsp;&nbsp; ret</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">可以打个比方，switch...case访问条件分支的方式像数组一样，是随机访问；而if...else是顺序访问。</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">他们各自的特点：</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">1、 总体上说，switch...case 效率要高于同样条件下的if...else，特别是当条件分支较多时。</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">2、switch...case占用较多的代码空间，因为它要生成跳表，特别是当case常量分布范围很大但实际有效值又比较少的情况，switch...case的空间利用率将变得很低。例如上面的代码，如果把case 10改成case 100，则会生成101个表项，而大部分表项是指向同一分支(default分支)。switch...case是在以空间换时间。</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">3、switch...case只能处理case为常量的情况，对非常量的情况是无能为力的。例如 if (a &gt; 1 &amp;&amp; a &lt; 100)，是无法使用switch...case来处理的。</p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-TOP: 0px">＊＊＊注意：如果把例子中的case分支减少一个，则生成的汇编码与if...else差别不大，此时不会生成跳表项，可见对于分支较少的情况，编译器会做特殊处理。<br><br>原文地址：<a href="http://blog.csdn.net/kevinyujm/archive/2009/02/18/3907964.aspx"><u><font color=#0000ff>http://blog.csdn.net/kevinyujm/archive/2009/02/18/3907964.aspx</font></u></a><br></p>
</span></span>
<img src ="http://www.cppblog.com/wc250en007/aggbug/136841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2010-12-18 18:41 <a href="http://www.cppblog.com/wc250en007/archive/2010/12/18/136841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取CPU时间戳代码 使用CPU时间戳进行高精度计时</title><link>http://www.cppblog.com/wc250en007/archive/2010/12/08/135796.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Wed, 08 Dec 2010 05:58:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2010/12/08/135796.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/135796.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2010/12/08/135796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/135796.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/135796.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium 'Times New Roman'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 12px; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif">
<div class=postTitle style="PADDING-LEFT: 3px; FONT-WEIGHT: bolder; FONT-SIZE: 13px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BORDER-BOTTOM: rgb(220,220,220) 1px solid; BACKGROUND-COLOR: rgb(245,245,245)">看一段程序用到了 RDTSC搜了了解了下，当时用途需要生成一个独一无二的ID来标志世界中所有的物体，用到了时间戳这个概念<br>__int64 GetCPUTime()<br>{<br>&nbsp;__asm{RDTSC}<br>}<br>同类文章学习下<br><a id=viewpost1_TitleUrl style="COLOR: navy; TEXT-DECORATION: none" href="http://www.cppblog.com/gcs8cn/archive/2010/06/09/117469.html"><br><br>获取CPU时间戳代码 使用CPU时间戳进行高精度计时</a></div>
<div class=postText style="PADDING-RIGHT: 10px; PADDING-LEFT: 3px; FONT-SIZE: 13px; PADDING-BOTTOM: 5px; LINE-HEIGHT: 16px; PADDING-TOP: 10px">
<p style="FONT-SIZE: 13px; MARGIN: 10px 0px; TEXT-INDENT: 20px; LINE-HEIGHT: 19px">在Pentium以上的CPU中，提供了一条机器指令RDTSC（Read Time Stamp Counter）来读取这个时间戳的数字，并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器，所以我们可以把这条指令看成是一个普通的函数调用。vc2003像这样：<br>inline unsigned __int64 GetTimeStampCount()<br>{<br>__asm RDTSC<br>}<br>对于vc6或者其他编译器可能不行，因为RDTSC不被C++的内嵌汇编器直接支持，所以我们要用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31，如下：<br>inline unsigned __int64 GetTimeStampCount()<br>{<br>__asm _emit 0x0F<br>__asm _emit 0x31<br>}</p>
<p style="FONT-SIZE: 13px; MARGIN: 10px 0px; TEXT-INDENT: 20px; LINE-HEIGHT: 19px">&nbsp;</p>
<p style="FONT-SIZE: 13px; MARGIN: 10px 0px; TEXT-INDENT: 20px; LINE-HEIGHT: 19px">&nbsp;</p>
<p style="FONT-SIZE: 13px; MARGIN: 10px 0px; TEXT-INDENT: 20px; LINE-HEIGHT: 19px">对关注性能的程序开发人员而言，一个好的计时部件既是益友，也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程，又是一件有力的调试武器，在有经验的程序员手里可以尽快的确定程序的性能瓶颈，或者对不同的算法作出有说服力的性能比较。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 　　在Windows平台下，常用的计时器有两种，一种是timeGetTime多媒体计时器，它可以提供毫秒级的计时。但这个精度对很多应用场合而言还是太粗糙了。另一种是QueryPerformanceCount计数器，随系统的不同可以提供微秒级的计数。对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员，善用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 　　本文要介绍的，是另一种直接利用Pentium&nbsp;&nbsp; CPU内部时间戳进行计时的高精度计时手段。以下讨论主要得益于《Windows图形编程》一书，第&nbsp;&nbsp; 15页－17页，有兴趣的读者可以直接参考该书。关于RDTSC指令的详细讨论，可以参考Intel产品手册。本文仅仅作抛砖之用。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 　　在&nbsp;&nbsp; Intel&nbsp;&nbsp; Pentium以上级别的CPU中，有一个称为&#8220;时间戳（Time&nbsp;&nbsp; Stamp）&#8221;的部件，它以64位无符号整型数的格式，记录了自CPU上电以来所经过的时钟周期数。由于目前的CPU主频都非常高，因此这个部件可以达到纳秒级的计时精度。这个精确性是上述两种方法所无法比拟的。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 　　在Pentium以上的CPU中，提供了一条机器指令RDTSC（Read&nbsp;&nbsp; Time&nbsp;&nbsp; Stamp&nbsp;&nbsp; Counter）来读取这个时间戳的数字，并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器，所以我们可以把这条指令看成是一个普通的函数调用。像这样：&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; inline&nbsp;&nbsp; unsigned&nbsp;&nbsp; __int64&nbsp;&nbsp; GetCycleCount()&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; {&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; __asm&nbsp;&nbsp; RDTSC&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; }&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 但是不行，因为RDTSC不被C++的内嵌汇编器直接支持，所以我们要用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31，如下：&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; inline&nbsp;&nbsp; unsigned&nbsp;&nbsp; __int64&nbsp;&nbsp; GetCycleCount()&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; {&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; __asm&nbsp;&nbsp; _emit&nbsp;&nbsp; 0x0F&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; __asm&nbsp;&nbsp; _emit&nbsp;&nbsp; 0x31&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; }&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 以后在需要计数器的场合，可以像使用普通的Win32&nbsp;&nbsp; API一样，调用两次GetCycleCount函数，比较两个返回值的差，像这样：&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; unsigned&nbsp;&nbsp; long&nbsp;&nbsp; t;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; (unsigned&nbsp;&nbsp; long)GetCycleCount();&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //Do&nbsp;&nbsp; Something&nbsp;&nbsp; time-intensive&nbsp;&nbsp; ...&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; t&nbsp;&nbsp; -=&nbsp;&nbsp; (unsigned&nbsp;&nbsp; long)GetCycleCount();&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 　　《Windows图形编程》第15页编写了一个类，把这个计数器封装起来。有兴趣的读者可以去参考那个类的代码。作者为了更精确的定时，做了一点小小的改进，把执行RDTSC指令的时间，通过连续两次调用GetCycleCount函数计算出来并保存了起来，以后每次计时结束后，都从实际得到的计数中减掉这一小段时间，以得到更准确的计时数字。但我个人觉得这一点点改进意义不大。在我的机器上实测，这条指令大概花掉了几十到100多个周期，在&nbsp;&nbsp; Celeron&nbsp;&nbsp; 800MHz的机器上，这不过是十分之一微秒的时间。对大多数应用来说，这点时间完全可以忽略不计；而对那些确实要精确到纳秒数量级的应用来说，这个补偿也过于粗糙了。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 这个方法的优点是：&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 1.高精度。可以直接达到纳秒级的计时精度（在1GHz的CPU上每个时钟周期就是一纳秒），这是其他计时方法所难以企及的。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 2.&nbsp;&nbsp; 成本低。timeGetTime&nbsp;&nbsp; 函数需要链接多媒体库winmm.lib，QueryPerformance*&nbsp;&nbsp; 函数根据MSDN的说明，需要硬件的支持（虽然我还没有见过不支持的机器）和KERNEL库的支持，所以二者都只能在Windows平台下使用（关于DOS平台下的高精度计时问题，可以参考《图形程序开发人员指南》，里面有关于控制定时器8253的详细说明）。但RDTSC指令是一条CPU指令，凡是i386平台下Pentium以上的机器均支持，甚至没有平台的限制（我相信i386版本UNIX和Linux下这个方法同样适用，但没有条件试验），而且函数调用的开销是最小的。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 3.&nbsp;&nbsp; 具有和CPU主频直接对应的速率关系。一个计数相当于1/(CPU主频Hz数)秒，这样只要知道了CPU的主频，可以直接计算出时间。这和&nbsp;&nbsp; QueryPerformanceCount不同，后者需要通过QueryPerformanceFrequency获取当前计数器每秒的计数次数才能换算成时间。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 这个方法的缺点是：&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 1.现有的C/C++编译器多数不直接支持使用RDTSC指令，需要用直接嵌入机器码的方式编程，比较麻烦。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 2.数据抖动比较厉害。其实对任何计量手段而言，精度和稳定性永远是一对矛盾。如果用低精度的timeGetTime来计时，基本上每次计时的结果都是相同的；而RDTSC指令每次结果都不一样，经常有几百甚至上千的差距。这是这种方法高精度本身固有的矛盾。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 关于这个方法计时的最大长度，我们可以简单的用下列公式计算：&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 自CPU上电以来的秒数&nbsp;&nbsp; =&nbsp;&nbsp; RDTSC读出的周期数&nbsp;&nbsp; /&nbsp;&nbsp; CPU主频速率（Hz）&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 64位无符号整数所能表达的最大数字是1.8&#215;10^19，在我的Celeron&nbsp;&nbsp; 800上可以计时大约700年（书中说可以在200MHz的Pentium上计时117年，这个数字不知道是怎么得出来的，与我的计算有出入）。无论如何，我们大可不必关心溢出的问题。&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 下面是几个小例子，简要比较了三种计时方法的用法与精度&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //Timer1.cpp&nbsp;&nbsp; 使用了RDTSC指令的Timer类//KTimer类的定义可以参见《Windows图形编程》P15&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //编译行：CL&nbsp;&nbsp; Timer1.cpp&nbsp;&nbsp; /link&nbsp;&nbsp; USER32.lib&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; #include&nbsp;&nbsp; &amp;ltstdio.h&gt;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; #include&nbsp;&nbsp; "KTimer.h"&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; main()&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; {&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; unsigned&nbsp;&nbsp; t;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; KTimer&nbsp;&nbsp; timer;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; timer.Start();&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; Sleep(1000);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; t&nbsp;&nbsp; =&nbsp;&nbsp; timer.Stop();&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; printf("Lasting&nbsp;&nbsp; Time:&nbsp;&nbsp; %d\n",t);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; }&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //Timer2.cpp&nbsp;&nbsp; 使用了timeGetTime函数&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //需包含&amp;ltmmsys.h&gt;，但由于Windows头文件错综复杂的关系&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //简单包含&amp;ltwindows.h&gt;比较偷懒：）&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //编译行：CL&nbsp;&nbsp; timer2.cpp&nbsp;&nbsp; /link&nbsp;&nbsp; winmm.lib&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; #include&nbsp;&nbsp; &amp;ltwindows.h&gt;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; #include&nbsp;&nbsp; &amp;ltstdio.h&gt;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; main()&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; {&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp; t1,&nbsp;&nbsp; t2;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; t1&nbsp;&nbsp; =&nbsp;&nbsp; timeGetTime();&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; Sleep(1000);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; t2&nbsp;&nbsp; =&nbsp;&nbsp; timeGetTime();&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; printf("Begin&nbsp;&nbsp; Time:&nbsp;&nbsp; %u\n",&nbsp;&nbsp; t1);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; printf("End&nbsp;&nbsp; Time:&nbsp;&nbsp; %u\n",&nbsp;&nbsp; t2);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; printf("Lasting&nbsp;&nbsp; Time:&nbsp;&nbsp; %u\n",(t2-t1));&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; }&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //Timer3.cpp&nbsp;&nbsp; 使用了QueryPerformanceCounter函数&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //编译行：CL&nbsp;&nbsp; timer3.cpp&nbsp;&nbsp; /link&nbsp;&nbsp; KERNEl32.lib&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; #include&nbsp;&nbsp; &amp;ltwindows.h&gt;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; #include&nbsp;&nbsp; &amp;ltstdio.h&gt;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; main()&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; {&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; LARGE_INTEGER&nbsp;&nbsp; t1,&nbsp;&nbsp; t2,&nbsp;&nbsp; tc;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; QueryPerformanceFrequency(&amp;tc);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; printf("Frequency:&nbsp;&nbsp; %u\n",&nbsp;&nbsp; tc.QuadPart);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; QueryPerformanceCounter(&amp;t1);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; Sleep(1000);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; QueryPerformanceCounter(&amp;t2);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; printf("Begin&nbsp;&nbsp; Time:&nbsp;&nbsp; %u\n",&nbsp;&nbsp; t1.QuadPart);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; printf("End&nbsp;&nbsp; Time:&nbsp;&nbsp; %u\n",&nbsp;&nbsp; t2.QuadPart);&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp; printf("Lasting&nbsp;&nbsp; Time:&nbsp;&nbsp; %u\n",(&nbsp;&nbsp; t2.QuadPart-&nbsp;&nbsp; t1.QuadPart));&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; }&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; ////////////////////////////////////////////////&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //以上三个示例程序都是测试1秒钟休眠所耗费的时间&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; file://测/试环境：Celeron&nbsp;&nbsp; 800MHz&nbsp;&nbsp; /&nbsp;&nbsp; 256M&nbsp;&nbsp; SDRAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows&nbsp;&nbsp; 2000&nbsp;&nbsp; Professional&nbsp;&nbsp; SP2&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Microsoft&nbsp;&nbsp; Visual&nbsp;&nbsp; C++&nbsp;&nbsp; 6.0&nbsp;&nbsp; SP5&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; ////////////////////////////////////////////////&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 以下是Timer1的运行结果，使用的是高精度的RDTSC指令&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; Lasting&nbsp;&nbsp; Time:&nbsp;&nbsp; 804586872&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 以下是Timer2的运行结果，使用的是最粗糙的timeGetTime&nbsp;&nbsp; API&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; Begin&nbsp;&nbsp; Time:&nbsp;&nbsp; 20254254&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; End&nbsp;&nbsp; Time:&nbsp;&nbsp; 20255255&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; Lasting&nbsp;&nbsp; Time:&nbsp;&nbsp; 1001&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; 以下是Timer3的运行结果，使用的是QueryPerformanceCount&nbsp;&nbsp; API&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; Frequency:&nbsp;&nbsp; 3579545&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; Begin&nbsp;&nbsp; Time:&nbsp;&nbsp; 3804729124&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; End&nbsp;&nbsp; Time:&nbsp;&nbsp; 3808298836&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span><br>&nbsp; Lasting&nbsp;&nbsp; Time:&nbsp;&nbsp; 3569712&nbsp;&nbsp;</p>
<p style="FONT-SIZE: 13px; MARGIN: 10px 0px; TEXT-INDENT: 20px; LINE-HEIGHT: 19px"><br>欢迎收藏本文 一起读网 【获取CPU时间戳代码 使用CPU时间戳进行高精度计时<span class=Apple-converted-space>&nbsp;</span><a style="COLOR: navy; TEXT-DECORATION: none" href="http://www.1qidu.com/?action-viewnews-itemid-16841">http://www.1qidu.com/?action-viewnews-itemid-16841</a>】<br>一起读网参考地址：<a style="COLOR: navy; TEXT-DECORATION: none" href="http://www.1qidu.com/?action-viewnews-itemid-16841">http://www.1qidu.com/?action-viewnews-itemid-16841</a><br><br><br>原文地址：<a href="http://www.cppblog.com/gcs8cn/archive/2010/06/09/117469.aspx"><u><font color=#0000ff>http://www.cppblog.com/gcs8cn/archive/2010/06/09/117469.aspx</font></u></a></p>
</div>
</span></span>
<img src ="http://www.cppblog.com/wc250en007/aggbug/135796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2010-12-08 13:58 <a href="http://www.cppblog.com/wc250en007/archive/2010/12/08/135796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于WINSOCK.H与winsock2.h中的重定义解决办法分析 </title><link>http://www.cppblog.com/wc250en007/archive/2010/10/23/130975.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Sat, 23 Oct 2010 06:01:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2010/10/23/130975.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/130975.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2010/10/23/130975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/130975.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/130975.html</trackback:ping><description><![CDATA[今天编译工程的时候遇到了这个问题,网上搜了下，扫噶，备忘一下<div><tr>
<td align="middle"><table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td width="650">
<div id="art" style="MARGIN: 15px">
<div>问题描述：在 VC 6.0中使用socket相关的函数时没有什么问题，可是到了.net下就有以下类似的错误， 
<div><font color="#990000">[C++ Error] winsock2.h(109): E2238 Multiple declaration 
for 'fd_set'<br>[C++ Error] winsock.h(54): E2344 Earlier declaration of 
'fd_set'<br>[C++ Error] winsock2.h(112): E2146 Need an identifier to 
declare<br>[C++ Warning] winsock2.h(144): W8017 Redefinition of 'FD_SET' is not 
identical<br>[C++ Error] winsock2.h(153): E2238 Multiple declaration for 
'timeval'<br>[C++ Error] winsock.h(97): E2344 Earlier declaration of 
'timeval'<br>[C++ Error] winsock2.h(209): E2238 Multiple declaration for 
'hostent'<br>[C++ Error] winsock.h(153): E2344 Earlier declaration of 
'hostent'<br>[C++ Error] winsock2.h(222): E2238 Multiple declaration for 
'netent'<br>[C++ Error] winsock.h(166): E2344 Earlier declaration of 
'netent'<br>[C++ Error] winsock2.h(229): E2238 Multiple declaration for 
'servent'<br>[C++ Error] winsock.h(173): E2344 Earlier declaration of 
'servent'<br>[C++ Error] winsock2.h(241): E2238 Multiple declaration for 
'protoent'<br>[C++ Error] winsock.h(185): E2344 Earlier declaration of 
'protoent'<br>[C++ Error] winsock2.h(327): E2238 Multiple declaration for 
'in_addr'<br>[C++ Error] winsock.h(269): E2344 Earlier declaration of 
'in_addr'<br>[C++ Error] winsock2.h(385): E2238 Multiple declaration for 
'sockaddr_in'<br>[C++ Error] winsock.h(319): E2344 Earlier declaration of 
'sockaddr_in'<br>[C++ Error] winsock2.h(395): E2238 Multiple declaration for 
'WSAData'<br>[C++ Error] winsock.h(329): E2344 Earlier declaration of 
'WSAData'<br>[C++ Error] winsock2.h(411): E2146 Need an identifier to 
declare<br>[C++ Warning] winsock2.h(455): W8017 Redefinition of 'SO_DONTLINGER' 
is not identical<br>[C++ Warning] winsock2.h(512): W8017 Redefinition of 
'AF_IPX' is not identical<br>[C++ Warning] winsock2.h(540): W8017 Redefinition 
of 'AF_MAX' is not identical<br>[C++ Error] winsock2.h(546): E2238 Multiple 
declaration for 'sockaddr'<br>[C++ Error] winsock.h(492): E2344 Earlier 
declaration of 'sockaddr'<br>[C++ Error] winsock2.h(586): E2238 Multiple 
declaration for 'sockproto'<br>[C++ Error] winsock.h(501): E2344 Earlier 
declaration of 'sockproto'<br>[C++ Error] winsock2.h(625): E2238 Multiple 
declaration for 'linger'<br>[C++ Error] winsock2.h(625): E2228 Too many error or 
warning messages</font></div>
<p><font color="#0000ff">Solution：</font></p>
<p>This problem arises because <tt><font face="新宋体">windows.h</font></tt> (at 
least, that version of it) includes not <tt><font face="新宋体">winsock2.h</font></tt> but <tt><font face="新宋体">winsock.h</font></tt>; 
sadly when Microsoft wrote <tt><font face="新宋体">winsock2.h</font></tt> they chose 
neither to change <tt><font face="新宋体">windows.h</font></tt> to include <tt><font face="新宋体">winsock2.h</font></tt>, which replaces <tt><font face="新宋体">winsock.h</font></tt>, nor to include <tt><font face="新宋体">windows.h</font></tt> from <tt><font face="新宋体">winsock2.h</font></tt> 
and then add the definitions for the new Winsock 2 API methods &amp; structures 
(this might seem reasonable since Winsock 2 does, strictly speaking, replace 
Winsock 1, but since the API must be fully backwards-compatible the distinction 
is somewhat meaningless and there's no real benefit to making <tt><font face="新宋体">winsock2.h</font></tt> standalone).</p>
<p><strong>The fix</strong> is thankfully simple: always "<tt><font face="新宋体">#include &lt;winsock2.h&gt;</font></tt>" <em>before</em> <tt><font face="新宋体">windows.h</font></tt>.</p>
<p>However, you must remember that if <tt><font face="新宋体">windows.h</font></tt> 
has been included by (for example) a higher-level header file that is 
subsequently including your header file, it's too late - so you must make sure 
that the higher-level header files respect this convention also.</p>
<p>It is however rarely necessary to modify the header files of libraries or 
other code modules you are using just because <em>you</em> include 
<em>their</em> header files, and <em>their</em> header files include <tt><font face="新宋体">windows.h</font></tt> - you can just include <tt><font face="新宋体">winsock2.h</font></tt> before you include the library's header 
files.</p><br>
<p>在包含jrtplib有时候我也遇到这个问题，解决方法与之相同。一句话，在#include&lt;windows.h&gt;之前 #include 
&lt;winsock2.h&gt; 问题就可以解决。<br></p>
<p><font face="宋体"><strong>问题描述]<br></strong>&nbsp;&nbsp; 
在包含了&lt;windows.h&gt;以及&lt;winsock2.h&gt;的工程中,编译有时会出现如<br>下错误:</font><br><font face="宋体">&nbsp;&nbsp;&nbsp;&nbsp; error C2011: 'fd_set' : 'struct' type redefinition<br>&nbsp;&nbsp;&nbsp;&nbsp; error 
C2011: 'timeval' : 'struct' type redefinition<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
....<br>&nbsp;&nbsp;&nbsp;&nbsp; error C2375: 'accept' : redefinition; different 
linkage<br><strong>[原因分析]<br></strong>&nbsp;&nbsp; 
主要原因是因为&lt;windows.h&gt;中包含了&lt;winsock.h&gt;头文件,由于其版<br>本的不同，导致出</font><font face="宋体">现上述的错误。&lt;windows.h&gt;中相关代码如下:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ifndef 
WIN32_LEAN_AND_MEAN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;cderr.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
#include &lt;dde.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include 
&lt;ddeml.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ........<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ifndef 
_MAC<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;winperf.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include 
&lt;winsock.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endif<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
.......</font><font face="宋体"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include 
&lt;commdlg.h&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endif<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
#endif<br><strong>[解决方案]<br></strong>&nbsp;&nbsp;&nbsp; 
由以上代码可以看出如果在没有定义WIN32_LEAN_AND_MEAN宏</font><font face="宋体">的大前<br>提下windows.h有可能包含winsock.h 头文件，因此我们得出一个很简单<br>的解决方</font><font face="宋体">法就是在包含&lt;windows.h&gt;之前定义WIN32_LEAN_AND_MEAN宏,如<br>下所示:<br>#define 
WIN32_LEAN_AND_MEAN<br>#include 
&lt;windows.h&gt;</font></p></div></div></td></tr></tbody></table>
<p style="MARGIN: 5px; LINE-HEIGHT: 150%"></p></td></tr>
<tr>
<td height="25">&nbsp;<font color="#000099"><strong>原文地址</strong></font> <a href="http://blog.sina.com.cn/s/blog_4906d564010094p8.html" target="_blank">http://blog.sina.com.cn/s/blog_4906d564010094p8.html</a> </td></tr></div><img src ="http://www.cppblog.com/wc250en007/aggbug/130975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2010-10-23 14:01 <a href="http://www.cppblog.com/wc250en007/archive/2010/10/23/130975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的调试输出类，感觉不错简单易用，备份下</title><link>http://www.cppblog.com/wc250en007/archive/2010/09/09/126230.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Thu, 09 Sep 2010 04:29:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2010/09/09/126230.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/126230.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2010/09/09/126230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/126230.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/126230.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#ifndef&nbsp;__FORMATSTRING_H__<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;__FORMATSTRING_H__</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">shlwapi.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma&nbsp;comment(lib,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">shlwapi.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;FS_BUFFER_DEFAULT&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;iBufLen</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CFormatString<br><img id=Codehighlighter1_246_581_Open_Image onclick="this.style.display='none'; Codehighlighter1_246_581_Open_Text.style.display='none'; Codehighlighter1_246_581_Closed_Image.style.display='inline'; Codehighlighter1_246_581_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_246_581_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_246_581_Closed_Text.style.display='none'; Codehighlighter1_246_581_Open_Image.style.display='inline'; Codehighlighter1_246_581_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_246_581_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_246_581_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CFormatString(&nbsp;LPCTSTR&nbsp;szStr,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;)<br><img id=Codehighlighter1_300_442_Open_Image onclick="this.style.display='none'; Codehighlighter1_300_442_Open_Text.style.display='none'; Codehighlighter1_300_442_Closed_Image.style.display='inline'; Codehighlighter1_300_442_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_300_442_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_300_442_Closed_Text.style.display='none'; Codehighlighter1_300_442_Open_Image.style.display='inline'; Codehighlighter1_300_442_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_300_442_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_300_442_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;vl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;va_start(vl,&nbsp;szStr);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vsnprintf(szBuffer,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(szBuffer)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)szStr,&nbsp;vl);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;va_end(vl);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_472_491_Open_Image onclick="this.style.display='none'; Codehighlighter1_472_491_Open_Text.style.display='none'; Codehighlighter1_472_491_Closed_Image.style.display='inline'; Codehighlighter1_472_491_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_472_491_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_472_491_Closed_Text.style.display='none'; Codehighlighter1_472_491_Open_Image.style.display='inline'; Codehighlighter1_472_491_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_472_491_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_472_491_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;szBuffer;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_521_540_Open_Image onclick="this.style.display='none'; Codehighlighter1_521_540_Open_Text.style.display='none'; Codehighlighter1_521_540_Closed_Image.style.display='inline'; Codehighlighter1_521_540_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_521_540_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_521_540_Closed_Text.style.display='none'; Codehighlighter1_521_540_Open_Image.style.display='inline'; Codehighlighter1_521_540_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">()&nbsp;</span><span id=Codehighlighter1_521_540_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_521_540_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;szBuffer;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;szBuffer[iBufLen];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;iBufLen</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;FormatString(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szString,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;)<br><img id=Codehighlighter1_669_975_Open_Image onclick="this.style.display='none'; Codehighlighter1_669_975_Open_Text.style.display='none'; Codehighlighter1_669_975_Closed_Image.style.display='inline'; Codehighlighter1_669_975_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_669_975_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_669_975_Closed_Text.style.display='none'; Codehighlighter1_669_975_Open_Image.style.display='inline'; Codehighlighter1_669_975_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_669_975_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_669_975_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;NULL&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;szString&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLength&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)strlen(&nbsp;szString&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;nLength&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;data[iBufLen];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;&nbsp;&nbsp;&nbsp;va;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;va_start(&nbsp;va,&nbsp;szString&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;wvnsprintf(data,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(data)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;szString,&nbsp;va&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;va_end(&nbsp;va&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;data;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;CFormatString</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">FS_BUFFER_DEFAULT</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;CFMSTR;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;FMSTR&nbsp;FormatString&lt;FS_BUFFER_DEFAULT&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;__FORMATSTRING_H__</span></div>
<br>CFMSTR&nbsp; out("输出参数语句%d..,%s,",.....); <br><br><br>也可以自己封装一些类或函数方便调试输出查找错误<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;setLastError(ST_Type&nbsp;type,&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&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: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">message&nbsp;,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">filename&nbsp;,<br><img id=Codehighlighter1_113_122_Open_Image onclick="this.style.display='none'; Codehighlighter1_113_122_Open_Text.style.display='none'; Codehighlighter1_113_122_Closed_Image.style.display='inline'; Codehighlighter1_113_122_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_113_122_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_113_122_Closed_Text.style.display='none'; Codehighlighter1_113_122_Open_Image.style.display='inline'; Codehighlighter1_113_122_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&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: #0000ff">int</span><span style="COLOR: #000000">&nbsp;line&nbsp;,&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;log_msg&nbsp;</span><span id=Codehighlighter1_113_122_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_113_122_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">=&nbsp;true</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">,&nbsp;<br><img id=Codehighlighter1_145_154_Open_Image onclick="this.style.display='none'; Codehighlighter1_145_154_Open_Text.style.display='none'; Codehighlighter1_145_154_Closed_Image.style.display='inline'; Codehighlighter1_145_154_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_145_154_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_154_Closed_Text.style.display='none'; Codehighlighter1_145_154_Open_Image.style.display='inline'; Codehighlighter1_145_154_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&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: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;_debug_&nbsp;</span><span id=Codehighlighter1_145_154_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_145_154_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">=&nbsp;true</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;_show_box&nbsp;</span><span id=Codehighlighter1_172_182_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_172_182_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">=&nbsp;false</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_184_893_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_184_893_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strncpy(last_error.message,&nbsp;message,&nbsp;THE_MAX_LASTERROR);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strncpy(last_error.filename,&nbsp;filename,&nbsp;MAX_PATH);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;last_error.line&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;line;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;szBuffer[&nbsp;THE_MAX_LASTERROR&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;sprintf(szBuffer,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s&nbsp;(%s,%d)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;last_error.message,&nbsp;last_error.filename,&nbsp;last_error.line);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_471_500_Open_Image onclick="this.style.display='none'; Codehighlighter1_471_500_Open_Text.style.display='none'; Codehighlighter1_471_500_Closed_Image.style.display='inline'; Codehighlighter1_471_500_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_471_500_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_471_500_Closed_Text.style.display='none'; Codehighlighter1_471_500_Open_Image.style.display='inline'; Codehighlighter1_471_500_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;log_msg&nbsp;)</span><span id=Codehighlighter1_471_500_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_471_500_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;note_message(szBuffer);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_518_553_Open_Image onclick="this.style.display='none'; Codehighlighter1_518_553_Open_Text.style.display='none'; Codehighlighter1_518_553_Closed_Image.style.display='inline'; Codehighlighter1_518_553_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_518_553_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_518_553_Closed_Text.style.display='none'; Codehighlighter1_518_553_Open_Image.style.display='inline'; Codehighlighter1_518_553_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;_debug_&nbsp;)</span><span id=Codehighlighter1_518_553_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_518_553_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputDebugStringA(szBuffer);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_573_891_Open_Image onclick="this.style.display='none'; Codehighlighter1_573_891_Open_Text.style.display='none'; Codehighlighter1_573_891_Closed_Image.style.display='inline'; Codehighlighter1_573_891_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_573_891_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_573_891_Closed_Text.style.display='none'; Codehighlighter1_573_891_Open_Image.style.display='inline'; Codehighlighter1_573_891_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;_show_box&nbsp;)</span><span id=Codehighlighter1_573_891_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_573_891_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_589_888_Open_Image onclick="this.style.display='none'; Codehighlighter1_589_888_Open_Text.style.display='none'; Codehighlighter1_589_888_Closed_Image.style.display='inline'; Codehighlighter1_589_888_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_589_888_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_589_888_Closed_Text.style.display='none'; Codehighlighter1_589_888_Open_Image.style.display='inline'; Codehighlighter1_589_888_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(type)</span><span id=Codehighlighter1_589_888_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_589_888_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;ST_ERROR:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBoxA(GetActiveWindow(),&nbsp;szBuffer,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ERROR</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;MB_OK</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">MB_ICONERROR);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;ST_WARNING:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBoxA(GetActiveWindow(),&nbsp;szBuffer,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WARNING</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;MB_OK</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">MB_ICONWARNING);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBoxA(GetActiveWindow(),&nbsp;szBuffer,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">NOTE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;MB_OK);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_897_954_Open_Image onclick="this.style.display='none'; Codehighlighter1_897_954_Open_Text.style.display='none'; Codehighlighter1_897_954_Closed_Image.style.display='inline'; Codehighlighter1_897_954_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_897_954_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_897_954_Closed_Text.style.display='none'; Codehighlighter1_897_954_Open_Image.style.display='inline'; Codehighlighter1_897_954_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_897_954_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_897_954_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vsprintf(&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;va&nbsp;pszMsg&nbsp;buffer&nbsp;not&nbsp;great&nbsp;2Kb&nbsp;.&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1000_1319_Open_Image onclick="this.style.display='none'; Codehighlighter1_1000_1319_Open_Text.style.display='none'; Codehighlighter1_1000_1319_Closed_Image.style.display='inline'; Codehighlighter1_1000_1319_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1000_1319_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1000_1319_Closed_Text.style.display='none'; Codehighlighter1_1000_1319_Open_Image.style.display='inline'; Codehighlighter1_1000_1319_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">__va(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pszMsg&nbsp;,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;)</span><span id=Codehighlighter1_1000_1319_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1000_1319_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_1032_1034_Open_Image onclick="this.style.display='none'; Codehighlighter1_1032_1034_Open_Text.style.display='none'; Codehighlighter1_1032_1034_Closed_Image.style.display='inline'; Codehighlighter1_1032_1034_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1032_1034_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1032_1034_Closed_Text.style.display='none'; Codehighlighter1_1032_1034_Open_Image.style.display='inline'; Codehighlighter1_1032_1034_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;msg[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">][&nbsp;</span><span style="COLOR: #000000">4096</span><span style="COLOR: #000000">&nbsp;]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1032_1034_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1032_1034_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ni&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;pbuf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;msg[&nbsp;ni</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;va;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;va_start(&nbsp;va&nbsp;,&nbsp;pszMsg&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_vscprintf(&nbsp;pszMsg&nbsp;,&nbsp;va&nbsp;);<br><img id=Codehighlighter1_1191_1244_Open_Image onclick="this.style.display='none'; Codehighlighter1_1191_1244_Open_Text.style.display='none'; Codehighlighter1_1191_1244_Closed_Image.style.display='inline'; Codehighlighter1_1191_1244_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1191_1244_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1191_1244_Closed_Text.style.display='none'; Codehighlighter1_1191_1244_Open_Image.style.display='inline'; Codehighlighter1_1191_1244_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;size&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4096</span><span style="COLOR: #000000">&nbsp;)</span><span id=Codehighlighter1_1191_1244_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1191_1244_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;va_end(&nbsp;va&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;buffer&nbsp;error&nbsp;.&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pbuf;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vsprintf(&nbsp;pbuf&nbsp;,&nbsp;pszMsg&nbsp;,&nbsp;va&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;va_end(&nbsp;va&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pbuf;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">msg[0];</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>文件查看<a href="http://www.cppblog.com/Files/wc250en007/debug.rar">Debug.rar</a>
<img src ="http://www.cppblog.com/wc250en007/aggbug/126230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2010-09-09 12:29 <a href="http://www.cppblog.com/wc250en007/archive/2010/09/09/126230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试程序执行时间的代码段</title><link>http://www.cppblog.com/wc250en007/archive/2010/08/18/123831.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Wed, 18 Aug 2010 06:49:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2010/08/18/123831.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/123831.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2010/08/18/123831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/123831.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/123831.html</trackback:ping><description><![CDATA[<p>在编程过程中经常遇到测试一段程序执行时间的问题，下面给出两种测试代码段执行时间的方法以供参考。</p>
<p>第一种方法：低精度，GetTickCount()函数的精度只有10ms，所以如果程序执行时间小于10ms，不能使用该函数<br>DWORD Milliseconds_Parser_Start;<br>DWORD Milliseconds_Parser_End;<br>Milliseconds_Parser_Start = ::GetTickCount();</p>
<p>// 待测试代码段</p>
<p>Milliseconds_Parser_End = ::GetTickCount();<br>TCHAR debugStr[256];<br>_stprintf(szDebug, "item: %d milin sec \n",Milliseconds_Parser_End - Milliseconds_Parser_Start);<br>OutputDebugString(debugStr);</p>
<p>第二种方法：高精度<br>LARGE_INTEGER t_freqency;<br>QueryPerformanceFrequency(&amp;t_freqency);<br>float f_countDiff2Milisecond = float(1000.0/t_freqency.QuadPart);</p>
<p>LARGE_INTEGER start;<br>LARGE_INTEGER end;<br>QueryPerformanceCounter(&amp;start); </p>
<p><br>// 待测试代码段</p>
<p>QueryPerformanceCounter(&amp;end);<br>TCHAR debugStr[256];<br>_stprintf(debugStr, _T("item: %f milin sec \n"),(end.QuadPart - start.QuadPart) * f_countDiff2Milisecond );<br>OutputDebugString(debugStr);</p>
<p>&nbsp;</p>
<p>CSDN博客：<a href="http://blog.csdn.net/rabbit729/archive/2010/05/22/5616976.aspx">http://blog.csdn.net/rabbit729/archive/2010/05/22/5616976.aspx</a></p>
<img src ="http://www.cppblog.com/wc250en007/aggbug/123831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2010-08-18 14:49 <a href="http://www.cppblog.com/wc250en007/archive/2010/08/18/123831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程临界区EnterCriticalSection和LeaveCriticalSection</title><link>http://www.cppblog.com/wc250en007/archive/2010/07/08/MultiThread.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Thu, 08 Jul 2010 02:39:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2010/07/08/MultiThread.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/119689.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2010/07/08/MultiThread.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/119689.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/119689.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 多个线程操作相同的数据时，一般是需要按顺序访问的，否则会引导数据错乱，无法控制数据，变成随机变量。为解决这个问题，就需要引入互斥变量，让每个线程都按顺序地访问变量。这样就需要使用EnterCriticalSection和LeaveCriticalSection函数有人比如的很形象：就像上厕所：门锁了，就等着，等到别人出来了，进去锁上，然后该干什么干什么，干完了，把门打开门没锁，就进去，锁上，然后该...&nbsp;&nbsp;<a href='http://www.cppblog.com/wc250en007/archive/2010/07/08/MultiThread.html'>阅读全文</a><img src ="http://www.cppblog.com/wc250en007/aggbug/119689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">Let me see see</a> 2010-07-08 10:39 <a href="http://www.cppblog.com/wc250en007/archive/2010/07/08/MultiThread.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>