﻿<?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/kusamba/category/14704.html</link><description>&lt;br&gt;大规模高性能网络服务器编程 大型游戏服务器编程 完成端口模型 TCP UDP P2P 网络编程
&lt;br&gt;
&lt;div style="border: 1px solid rgb(102, 102, 102); padding: 3px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;a id="MyLinks1_HomeLink" href="http://www.cppblog.com/"&gt;C++博客&lt;/a&gt; | 
&lt;a id="MyLinks1_MyHomeLink" href="http://www.cppblog.com/kusamba/"&gt;首页&lt;/a&gt; | 
&lt;a id="MyLinks1_NewPostLink" href="http://www.cppblog.com/kusamba/admin/EditPosts.aspx?opt=1"&gt;发新随笔&lt;/a&gt; | 
&lt;a id="MyLinks1_NewArticleLink" href="/EnterMyBlog.aspx?NewArticle=1"&gt;发新文章&lt;/a&gt; | 
&lt;a id="MyLinks1_ContactLink" accesskey="9" href="http://www.cppblog.com/kusamba/contact.aspx?id=1"&gt;联系&lt;/a&gt; | 
&lt;a id="MyLinks1_Syndication" href="http://www.cppblog.com/kusamba/Rss.aspx"&gt;聚合&lt;/a&gt; &lt;a id="MyLinks1_XMLLink" href="http://www.cppblog.com/kusamba/Rss.aspx"&gt;&lt;img src="http://www.cppblog.com/images/xml.gif" style="border-width: 0px;"&gt;&lt;/a&gt; | 
&lt;a id="MyLinks1_Admin" href="http://www.cppblog.com/kusamba/admin/EditPosts.aspx"&gt;管理&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-0991521278302727";
/* 728x90, 创建于 08-6-11 */
google_ad_slot = "5971556100";
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 24 May 2011 11:04:41 GMT</lastBuildDate><pubDate>Tue, 24 May 2011 11:04:41 GMT</pubDate><ttl>60</ttl><item><title>c++类函数地址</title><link>http://www.cppblog.com/kusamba/archive/2011/05/24/147010.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Tue, 24 May 2011 02:06:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2011/05/24/147010.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/147010.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2011/05/24/147010.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/147010.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/147010.html</trackback:ping><description><![CDATA[
		<p>class AObj;</p>
		<p>typedef int (AObj::*pfun)();</p>
		<p>pfun pf_protected1 = NULL;<br />pfun pf_protected2 = NULL;<br />pfun pf_private1 = NULL;<br />pfun pf_private2 = NULL;</p>
		<p>class AObj<br />{<br />public:<br />    AObj(){};</p>
		<p>    static int a_static_fun()<br />    {<br />        pf_protected1 = &amp;AObj::a_protected_fun1;<br />        pf_protected2 = &amp;AObj::a_protected_fun2;</p>
		<p>        pf_private1 = &amp;AObj::a_private_fun1;<br />        pf_private2 = &amp;AObj::a_private_fun2;<br />        return -1;<br />    }</p>
		<p>    int a_public_fun1()<br />    {<br />        return 0;<br />    }<br />    int a_public_fun2()<br />    {<br />        return 1;<br />    }<br />protected:</p>
		<p>    int a_protected_fun1()<br />    {<br />        return 2;<br />    }</p>
		<p>    int a_protected_fun2()<br />    {<br />        return 3;<br />    }<br />private:<br />    int a_private_fun1()<br />    {<br />        return 4;<br />    }<br />    int a_private_fun2()<br />    {<br />        return 5;<br />    }<br />};</p>
		<p>
				<br />int test1(char* p);<br />int test2(char* p);</p>
		<p>int test1(char* p)<br />{<br />    test2(p);</p>
		<p>    return 1;<br />}</p>
		<p>int test2(char* p)<br />{<br />    for (int i = 0; i &lt; 172; i++)<br />    {<br />        *p++ = '\0';<br />    }</p>
		<p>    return 0;<br />}</p>
		<p> </p>
		<p>
				<br />int _tmain(int argc, _TCHAR* argv[])<br />{<br />    AObj obj;</p>
		<p>    AObj::a_static_fun();</p>
		<p>    printf("obj: %p\n", &amp;obj);<br />    printf("AObj::a_static_fun %p\n", &amp;AObj::a_static_fun);</p>
		<p>    printf("AObj::a_public_fun1 %p\n", &amp;AObj::a_public_fun1);<br />    printf("AObj::a_public_fun2 %p\n", &amp;AObj::a_public_fun2);</p>
		<p>    printf("AObj::a_protected_fun1 %p\n", pf_protected1);<br />    printf("AObj::a_protected_fun2 %p\n", pf_protected2);</p>
		<p>    printf("AObj::a_private_fun1 %p\n", pf_private1);<br />    printf("AObj::a_private_fun2 %p\n", pf_private2);</p>
		<p>    //char szbuf[2];<br />    //sprintf(szbuf, "%d", 3.54f);</p>
		<p>    //test1(szbuf);</p>
		<p>
				<br /> return 0;<br />}<br /></p>
<img src ="http://www.cppblog.com/kusamba/aggbug/147010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2011-05-24 10:06 <a href="http://www.cppblog.com/kusamba/archive/2011/05/24/147010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows下写的代码，linux下编译，如何解决warning: no newline at end of file?</title><link>http://www.cppblog.com/kusamba/archive/2011/05/11/146160.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Wed, 11 May 2011 01:23:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2011/05/11/146160.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/146160.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2011/05/11/146160.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/146160.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/146160.html</trackback:ping><description><![CDATA[
		<div id="blog_text" class="cnt">
				<p>今天写了一段代码, 是在Windows下编辑的, 保存后放在linux系统下编译.</p>
				<p>gcc和cc都产生以下的警告:<br />
a.h:1:2: warning: no newline at end of file</p>
				<p>后来发现解决这个问题产生的原因是源文件的最后一行没有回车符造成的; 解决的办法很简单, 在最后一行敲一个回车, 然后保存, 重新编译. </p>
		</div>
<img src ="http://www.cppblog.com/kusamba/aggbug/146160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2011-05-11 09:23 <a href="http://www.cppblog.com/kusamba/archive/2011/05/11/146160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSDN无法显示页面的解决</title><link>http://www.cppblog.com/kusamba/archive/2011/01/13/138488.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Thu, 13 Jan 2011 14:48:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2011/01/13/138488.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/138488.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2011/01/13/138488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/138488.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/138488.html</trackback:ping><description><![CDATA[<font class=Apple-style-span color=#333333 face="Georgia, 'Times New Roman', Times, san-serif"><span style="LINE-HEIGHT: 25px; FONT-SIZE: 14px" class=Apple-style-span>症状：</span></font><br><font class=Apple-style-span color=#333333 face="Georgia, 'Times New Roman', Times, san-serif"><span style="LINE-HEIGHT: 25px; FONT-SIZE: 14px" class=Apple-style-span>MSDN无法正常显示页面，目录显示正常。提示网页错误！</span></font><br><br><font class=Apple-style-span color=#333333 face="Georgia, 'Times New Roman', Times, san-serif"><span style="LINE-HEIGHT: 25px; FONT-SIZE: 14px" class=Apple-style-span>cmd到命令行执行如下命令</span></font><br><font class=Apple-style-span color=#333333 face="Georgia, 'Times New Roman', Times, san-serif"><span style="LINE-HEIGHT: 25px; FONT-SIZE: 14px" class=Apple-style-span>regsvr32 "C:\Program Files\Common Files\Microsoft Shared\Help\<span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -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" class=Apple-style-span><span style="LINE-HEIGHT: 25px; FONT-FAMILY: Georgia, 'Times New Roman', Times, san-serif; COLOR: rgb(51,51,51); FONT-SIZE: 14px" class=Apple-style-span>hxds.dll"</span></span></span></font></span></span> 
<img src ="http://www.cppblog.com/kusamba/aggbug/138488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2011-01-13 22:48 <a href="http://www.cppblog.com/kusamba/archive/2011/01/13/138488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类型检测和根据结构体中的变量地址取结构体地址</title><link>http://www.cppblog.com/kusamba/archive/2010/12/28/137628.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Tue, 28 Dec 2010 15:51:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/12/28/137628.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/137628.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/12/28/137628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/137628.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/137628.html</trackback:ping><description><![CDATA[<br>请各位不吝指教，谢谢！<br><br>typeof.h:<br>
<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"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #008000">/*</span><span style="COLOR: #008000">***********************************************************************<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #008000">*&nbsp;Detect&nbsp;a&nbsp;variable's&nbsp;type&nbsp;or&nbsp;kind<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #008000">*&nbsp;by&nbsp;kusamba@126.com&nbsp;2010-12-28<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">#pragma&nbsp;once<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typeinfo.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">assert.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">#ifdef&nbsp;&nbsp;__cplusplus<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;detect&nbsp;static&nbsp;type/class&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;IS_TYPE_OF(TYPE,&nbsp;variable)&nbsp;&nbsp;&nbsp;&nbsp;assert(&nbsp;0&nbsp;==&nbsp;_stricmp(&nbsp;typeid(TYPE).name(),&nbsp;typeid(variable).name()&nbsp;)&nbsp;)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;detect&nbsp;polymorphic&nbsp;type&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;IS_KIND_OF(TYPE,&nbsp;ptr)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(&nbsp;NULL&nbsp;!=&nbsp;dynamic_cast&lt;TYPE*&gt;(ptr)&nbsp;)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;detect&nbsp;static&nbsp;type/class&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;IS_TYPE_OF(TYPE,&nbsp;variable)&nbsp;&nbsp;&nbsp;&nbsp;assert(&nbsp;0&nbsp;==&nbsp;_stricmp(&nbsp;typeid(TYPE).name(),&nbsp;typeid(variable).name()&nbsp;)&nbsp;)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;detect&nbsp;polymorphic&nbsp;type&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;IS_KIND_OF(TYPE,&nbsp;ptr)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(&nbsp;0&nbsp;&amp;&amp;&nbsp;"C&nbsp;Not&nbsp;Support&nbsp;Inheritance!"&nbsp;)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span></div>
<br>containerof.h<br>
<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"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #008000">/*</span><span style="COLOR: #008000">***********************************************************************<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #008000">*&nbsp;Obtain&nbsp;the&nbsp;struct/class&nbsp;address&nbsp;by&nbsp;it's&nbsp;member&nbsp;address<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #008000">*&nbsp;by&nbsp;Kusamba@126.com&nbsp;2010-12-28<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">#pragma&nbsp;once<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stddef.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;Linux&nbsp;Kernel.h&nbsp;GCC&nbsp;Define&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #008000">#define&nbsp;container_of(ptr,&nbsp;type,&nbsp;member)&nbsp;({&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;typeof(&nbsp;((type&nbsp;*)0)-&gt;member&nbsp;)&nbsp;*__mptr&nbsp;=&nbsp;(ptr);&nbsp;&nbsp;&nbsp;&nbsp;\<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;(type&nbsp;*)(&nbsp;(char&nbsp;*)__mptr&nbsp;-&nbsp;offsetof(type,member)&nbsp;);})<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">#ifdef&nbsp;__cplusplus<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">#ifdef&nbsp;&nbsp;_WIN64<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;CONTAINER_OF(ptr,&nbsp;TYPE,&nbsp;MEMBER)&nbsp;&nbsp;&nbsp;&nbsp;reinterpret_cast&lt;TYPE*&gt;(&nbsp;(ptrdiff_t)(&nbsp;reinterpret_cast&lt;char*&gt;(ptr)&nbsp;-&nbsp;offsetof(TYPE,&nbsp;MEMBER)&nbsp;)&nbsp;)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;CONTAINER_OF(ptr,&nbsp;TYPE,&nbsp;MEMBER)&nbsp;&nbsp;&nbsp;&nbsp;reinterpret_cast&lt;TYPE*&gt;(&nbsp;(&nbsp;reinterpret_cast&lt;char*&gt;(ptr)&nbsp;-&nbsp;offsetof(TYPE,&nbsp;MEMBER)&nbsp;)&nbsp;)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">#ifdef&nbsp;&nbsp;_WIN64<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;CONTAINER_OF(ptr,&nbsp;TYPE,&nbsp;MEMBER)&nbsp;&nbsp;&nbsp;&nbsp;(TYPE*)(&nbsp;(ptrdiff_t)(&nbsp;(char*)(ptr)&nbsp;-&nbsp;offsetof(TYPE,&nbsp;MEMBER)&nbsp;)&nbsp;)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;CONTAINER_OF(ptr,&nbsp;TYPE,&nbsp;MEMBER)&nbsp;&nbsp;&nbsp;&nbsp;(TYPE*)(&nbsp;(&nbsp;(char*)(ptr)&nbsp;-&nbsp;offsetof(TYPE,&nbsp;MEMBER)&nbsp;)&nbsp;)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;__cplusplus&nbsp;*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000"></span></div>
<br>测试代码：<br>
<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"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">typeof.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">containerof.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #808080">////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Test&nbsp;Kind/Type&nbsp;of</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #808080">////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;_typeof_<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CA&nbsp;{};<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CB&nbsp;{};<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;SA&nbsp;{};<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;SB&nbsp;{};<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CP&nbsp;{};<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CC&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CP&nbsp;{};<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test()<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;int_a;<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_TYPE_OF(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,&nbsp;int_a);<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_TYPE_OF(float,&nbsp;int_a);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pint_a;<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_TYPE_OF(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,&nbsp;pint_a);<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_TYPE_OF(int,&nbsp;pint_a);<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_TYPE_OF(float*,&nbsp;pint_a);<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_TYPE_OF(float,&nbsp;pint_a);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CA&nbsp;ca;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CA</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pca;<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_TYPE_OF(CA,&nbsp;ca);<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_TYPE_OF(CA</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,&nbsp;pca);<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_TYPE_OF(CA,&nbsp;pca);<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #008000"><br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_TYPE_OF(CB,&nbsp;ca);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_KIND_OF(CA,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ca);<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CP&nbsp;parent;<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CC&nbsp;child;<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_TYPE_OF(CP,&nbsp;parent);<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_TYPE_OF(CC,&nbsp;parent);<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_TYPE_OF(CP,&nbsp;child);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_TYPE_OF(CC,&nbsp;child);<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_KIND_OF(CP,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">parent);<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IS_KIND_OF(CC,&nbsp;&amp;parent);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_KIND_OF(CP,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">child);<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_KIND_OF(CC,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">child);&nbsp;<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">type_of&nbsp;Done!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">}</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">namespace&nbsp;_typeof_</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #808080">////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">58</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;container&nbsp;of&nbsp;test</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">59</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #808080">////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">60</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;_container_of_<br></span><span style="COLOR: #008080">61</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">62</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;SA&nbsp;<br></span><span style="COLOR: #008080">63</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">64</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m_iA;<br></span><span style="COLOR: #008080">65</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};<br></span><span style="COLOR: #008080">66</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">67</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;SB&nbsp;<br></span><span style="COLOR: #008080">68</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">69</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m_iB;<br></span><span style="COLOR: #008080">70</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SA&nbsp;&nbsp;m_sa;<br></span><span style="COLOR: #008080">71</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};<br></span><span style="COLOR: #008080">72</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">73</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test()<br></span><span style="COLOR: #008080">74</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">75</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SB&nbsp;val;<br></span><span style="COLOR: #008080">76</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">77</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*error&nbsp;C2039:&nbsp;'m_iA'&nbsp;:&nbsp;is&nbsp;not&nbsp;a&nbsp;member&nbsp;of&nbsp;'_container_of_::SB'</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">78</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*not&nbsp;support&nbsp;nesting</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">79</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">SB*&nbsp;pSB&nbsp;=&nbsp;CONTAINER_OF(&amp;val.m_sa.m_iA,&nbsp;SB,&nbsp;m_iA);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">80</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*end</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">81</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">82</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SB</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pSB&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CONTAINER_OF(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">val.m_iB,&nbsp;SB,&nbsp;m_iB);<br></span><span style="COLOR: #008080">83</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">84</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IS_TYPE_OF(SB</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,&nbsp;pSB);<br></span><span style="COLOR: #008080">85</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">86</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">container_of&nbsp;Done!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">87</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">88</span>&nbsp;<span style="COLOR: #000000">}</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">_container_of_</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">89</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">90</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">91</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">92</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;_typeof_::Test();<br></span><span style="COLOR: #008080">93</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;_container_of_::Test();<br></span><span style="COLOR: #008080">94</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">95</span>&nbsp;<span style="COLOR: #000000">&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">;<br></span><span style="COLOR: #008080">96</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">97</span>&nbsp;<span style="COLOR: #000000"></span></div>
<br>
<img src ="http://www.cppblog.com/kusamba/aggbug/137628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-12-28 23:51 <a href="http://www.cppblog.com/kusamba/archive/2010/12/28/137628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STL容器使用之二：deque</title><link>http://www.cppblog.com/kusamba/archive/2010/09/17/126895.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Fri, 17 Sep 2010 09:19:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/09/17/126895.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/126895.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/09/17/126895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/126895.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/126895.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文总结了stl deque常用的规范的使用方法，以及如何避免iterator失效，老鸟勿入！！！&nbsp;&nbsp;<a href='http://www.cppblog.com/kusamba/archive/2010/09/17/126895.html'>阅读全文</a><img src ="http://www.cppblog.com/kusamba/aggbug/126895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-09-17 17:19 <a href="http://www.cppblog.com/kusamba/archive/2010/09/17/126895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STL容器使用之一：vector</title><link>http://www.cppblog.com/kusamba/archive/2010/09/16/126786.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Thu, 16 Sep 2010 09:22:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/09/16/126786.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/126786.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/09/16/126786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/126786.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/126786.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文总结了stl vector常用的规范的使用方法，以及如何避免iterator失效，老鸟勿入！！！&nbsp;&nbsp;<a href='http://www.cppblog.com/kusamba/archive/2010/09/16/126786.html'>阅读全文</a><img src ="http://www.cppblog.com/kusamba/aggbug/126786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-09-16 17:22 <a href="http://www.cppblog.com/kusamba/archive/2010/09/16/126786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]一个有用的Date/DateTime类</title><link>http://www.cppblog.com/kusamba/archive/2010/09/02/125648.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Thu, 02 Sep 2010 08:28:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/09/02/125648.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/125648.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/09/02/125648.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/125648.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/125648.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这里设计了一个类，通过4个字节存储日期，8个字节存储DateTime,并添加了一些跟时间日期相关的函数， 如：星期几查询，特定日期之后多少天是几号， 两个日期之间相隔多少天等等。对于一般的用途，基本上够用了头文件：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter....&nbsp;&nbsp;<a href='http://www.cppblog.com/kusamba/archive/2010/09/02/125648.html'>阅读全文</a><img src ="http://www.cppblog.com/kusamba/aggbug/125648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-09-02 16:28 <a href="http://www.cppblog.com/kusamba/archive/2010/09/02/125648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用宏实现的一个singleton</title><link>http://www.cppblog.com/kusamba/archive/2010/08/31/125409.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Tue, 31 Aug 2010 07:56:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/08/31/125409.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/125409.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/08/31/125409.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/125409.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/125409.html</trackback:ping><description><![CDATA[<br>代码：uniobj.h<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">/*</span><span style="color: #008000;">***********************************************************************<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;">*<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;">*&nbsp;Created&nbsp;by&nbsp;kusamba@126.com&nbsp;at&nbsp;2009-2-12&nbsp;16:37<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">#ifndef&nbsp;_uniobj_23593953_h_<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_uniobj_23593953_h_</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">WTypes.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">assert.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">/*</span><span style="color: #008000;">*<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #008000;">*&nbsp;Universal&nbsp;Object&nbsp;Declare<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;UNIOBJ_DECL(theClass)</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">\</span><span style="color: #000000;"><br></span><span style="color: #008080;">16</span> &nbsp;&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;theClass</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Get()</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;{</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;assert(NULL&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;ms_pk##theClass);</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ms_pk##theClass;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;theClass</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Create()</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;{</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;assert(NULL&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;ms_pk##theClass);</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ms_pk##theClass&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;theClass(); \<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Destroy()</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;{</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&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;ms_pk##theClass)</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">\<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;ms_pk##theClass;</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ms_pk##theClass&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;"></span><span style="color: #000000;"></span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">:&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;Initialize();</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">:</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"></span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;theClass();</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">virtual ~</span><span style="color: #000000;">theClass();</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </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;&nbsp;&nbsp; </span><span style="color: #000000;"></span><span style="color: #000000;">\<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;theClass</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;ms_pk##theClass;<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">/*</span><span style="color: #008000;">*<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #008000;">*&nbsp;Universal&nbsp;Object&nbsp;Implement<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;UNIOBJ_IMP(theClass)</span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp; </span><span style="color: #000000;"> </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;"></span><span style="color: #000000;">\</span><span style="color: #000000;"><br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;theClass</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;theClass::ms_pk##theClass&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#endif</span><span style="color: #008000;">//</span><span style="color: #008000;">_uniobj_23593953_h_</span></div>
<br>如何使用：<br>头文件：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">uniobj.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br></span><span style="color: #008080;">2</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br></span><span style="color: #008080;">3</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ATestSingleTon<br></span><span style="color: #008080;">4</span><span style="color: #000000;"><img id="Codehighlighter1_42_81_Open_Image" onclick="this.style.display='none'; codehighlighter1_42_81_open_text.style.display=" none="" ;="" codehighlighter1_42_81_closed_image.style.display="'inline';" codehighlighter1_42_81_closed_text.style.display="'inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_42_81_Closed_Image" onclick="this.style.display='none'; codehighlighter1_42_81_closed_text.style.display=" none="" ;="" codehighlighter1_42_81_open_image.style.display="'inline';" codehighlighter1_42_81_open_text.style.display="'inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_42_81_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_42_81_Open_Text"><span style="color: #000000;">{<br></span><span style="color: #008080;">5</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br></span><span style="color: #008080;">6</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"><br></span><span style="color: #008080;">7</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">UNIOBJ_DECL(ATestSingleTon)<br></span><span style="color: #008080;">8</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span></div>
<br>cpp文件：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;">UNIOBJ_IMP(ATestSingleTon)<br></span><span style="color: #008080;">2</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br>&nbsp;&nbsp;&nbsp;&nbsp; ATestSingleTon::ATestSingleTon()<br>&nbsp;&nbsp;&nbsp; {}<br><br>&nbsp;&nbsp;&nbsp; ATestSingleTon::~ATestSingleTon()<br>&nbsp;&nbsp;&nbsp; {}<br><br></span><span style="color: #008080;">3</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;ATestSingleTon::Initialize()<br></span><span style="color: #008080;">4</span><span style="color: #000000;"><img id="Codehighlighter1_62_81_Open_Image" onclick="this.style.display='none'; codehighlighter1_62_81_open_text.style.display=" none="" ;="" codehighlighter1_62_81_closed_image.style.display="'inline';" codehighlighter1_62_81_closed_text.style.display="'inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_62_81_Closed_Image" onclick="this.style.display='none'; codehighlighter1_62_81_closed_text.style.display=" none="" ;="" codehighlighter1_62_81_open_image.style.display="'inline';" codehighlighter1_62_81_open_text.style.display="'inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_62_81_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_62_81_Open_Text"><span style="color: #000000;">{<br></span><span style="color: #008080;">5</span><span style="color: #000000;"><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;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br></span><span style="color: #008080;">6</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span></div>
<br>main.cpp<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br></span><span style="color: #008080;">&nbsp;2</span><span style="color: #000000;"><img id="Codehighlighter1_11_149_Open_Image" onclick="this.style.display='none'; codehighlighter1_11_149_open_text.style.display=" none="" ;="" codehighlighter1_11_149_closed_image.style.display="'inline';" codehighlighter1_11_149_closed_text.style.display="'inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_11_149_Closed_Image" onclick="this.style.display='none'; codehighlighter1_11_149_closed_text.style.display=" none="" ;="" codehighlighter1_11_149_open_image.style.display="'inline';" codehighlighter1_11_149_open_text.style.display="'inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_11_149_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_11_149_Open_Text"><span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;ATestSingleTon</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pk&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ATestSingleTon::Create();<br></span><span style="color: #008080;">&nbsp;4</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&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;pk)<br></span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img id="Codehighlighter1_82_100_Open_Image" onclick="this.style.display='none'; codehighlighter1_82_100_open_text.style.display=" none="" ;="" codehighlighter1_82_100_closed_image.style.display="'inline';" codehighlighter1_82_100_closed_text.style.display="'inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_82_100_Closed_Image" onclick="this.style.display='none'; codehighlighter1_82_100_closed_text.style.display=" none="" ;="" codehighlighter1_82_100_open_image.style.display="'inline';" codehighlighter1_82_100_open_text.style.display="'inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_82_100_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_82_100_Open_Text"><span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;6</span><span style="color: #000000;"><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;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;7</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"><br></span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"><img src="http://www.cppblog.com/Images/dot.gif">mainloop</span><span style="color: #008000;"><br></span><span style="color: #008080;">10</span><span style="color: #008000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"></span><span style="color: #000000;"><br></span><span style="color: #008080;">11</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;ATestSingleTon::Destroy();<br></span><span style="color: #008080;">12</span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span></div>
<br>分析：<br>1，singleton的构建在程序入口，析构在程序的结尾，可以避免相当多的多线程问题<br>2，这里的singleton对象均为程序必须要用到的对象，跟传统singleton定义有些出入<br>3，定义了initialize()函数只为对象的初始化提供一个接口，如果不需要可以直接return true <br><br><br>PS：可以参考看看如下资料<br>1，细说Singleton模式：创建、多线程与销毁 <a href="http://developer.51cto.com/art/200908/143492.htm">http://developer.51cto.com/art/200908/143492.htm</a>  <img src ="http://www.cppblog.com/kusamba/aggbug/125409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-08-31 15:56 <a href="http://www.cppblog.com/kusamba/archive/2010/08/31/125409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>_MSC_VER 与vs</title><link>http://www.cppblog.com/kusamba/archive/2010/08/31/125405.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Tue, 31 Aug 2010 07:25:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/08/31/125405.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/125405.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/08/31/125405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/125405.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/125405.html</trackback:ping><description><![CDATA[<p><br>_MSC_VER 定义编译器的版本。<br><br>下面是一些编译器版本的_MSC_VER值<br>&nbsp;<br>　　MS VC++ 9.0 _MSC_VER = 1500<br>&nbsp;&nbsp;&nbsp; 　MS VC++ 8.0 _MSC_VER = 1400 　　<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MS VC++ 7.1 _MSC_VER = 1310 　　<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MS VC++ 7.0 _MSC_VER = 1300 　　<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MS VC++ 6.0 _MSC_VER = 1200 　　<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MS VC++ 5.0 _MSC_VER = 1100 <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"><span style="COLOR: #008080">&nbsp;1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;UStrcpy(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pcDest,&nbsp;size_t&nbsp;stDestSize,&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;pcSrc)<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_66_617_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_617_Open_Text.style.display='none'; Codehighlighter1_66_617_Closed_Image.style.display='inline'; Codehighlighter1_66_617_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_66_617_Closed_Image onclick="this.style.display='none'; Codehighlighter1_66_617_Closed_Text.style.display='none'; Codehighlighter1_66_617_Open_Image.style.display='inline'; Codehighlighter1_66_617_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_617_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_66_617_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">#if</span><span style="COLOR: #000000">&nbsp;_MSC_VER&nbsp;&gt;=&nbsp;1400</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;strcpy_s(pcDest,&nbsp;stDestSize,&nbsp;pcSrc);<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pcDest;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">#else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;#if&nbsp;_MSC_VER&nbsp;&gt;=&nbsp;1400</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;_ASSERT(stDestSize&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;stSrcLen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strlen(pcSrc);<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;_ASSERT(stDestSize&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;stSrcLen);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&gt;&nbsp;because&nbsp;need&nbsp;null&nbsp;character</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;stWrite;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(stDestSize&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;stSrcLen)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;stDestSize&nbsp;&lt;&nbsp;stSrcLen&nbsp;+&nbsp;1</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stWrite&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;stDestSize;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stWrite&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;stSrcLen&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pcResult&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strncpy(pcDest,&nbsp;pcSrc,&nbsp;stWrite);<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;pcResult[stDestSize&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</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">\0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pcResult;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;#if&nbsp;_MSC_VER&nbsp;&gt;=&nbsp;1400</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p>&nbsp;</p>
<p><strong style="FONT-SIZE: 14pt">说明：</strong><br>Visual C++ 1.0，集成了MFC 2.0，是Visual C++第一代版本，1992年推出，可同时支持16位处理器与32位处理器版，可算是Microsoft C/C++ 7.0的更新版本。<br><br>Visual C++ 1.5，集成了MFC 2.5，增加了&#8220;目标文件链接嵌入 (OLE)2.0和支持MFC的开放式数据库链接（ODBC）。这个版本只有16位的，也是第一个以CD-ROM为软件载体的版本。这个版本也没有所谓&#8220;标准版&#8221;。它是最后一个支持16位软件编程的软件，也是第一个支持基于x86机器的32位编程软件。<br><br>Visual C++ 2.0，集成了MFC 3.0，第一个只发行32位的版本。这个版本提前发行了，几乎成了一个&#8220;丢失的版本&#8221;。这是因为那个时候Windows 95（开发代码为"Chicago"）还没有发行，而Windows NT又只占有很小的市场份额。该版本用户可以通过微软公司的订阅服务（Microsoft Subscription Service）升级至2.1和2.2版本。微软公司在这个版本中集成并升级了Visual C++ 1.5，作为2.0版本（Visual C++ 1.5升级后版本号：1.51）以及2.1版本（Visual C++ 1.5升级后版本号：1.52）的一部分。Visual C++ 2.x附带了16位和32位版本的CDK，同时支持Win32s的开发。Visual C++ 2.2及其后续版本不再升级Visual C++ 1.5（尽管它一直被集成至Visual C++ 4.x）。尽管出生的比Windows 95早，这个版本的发行日期还是非常接近Windows 95，可是当Windows 95发行时，Visual C++ 4.0也已经发行了。因此很多程序开发者直接从1.x过渡到4.0，把2.x跳过去了。<br><br>Visual C++ 4.0，集成了MFC 4.0，这个版本是专门为Windows 95以及Windows NT设计的。用户可以通过微软公司的订阅服务（Microsoft Subscription Service）升级至4.1和4.2版本（此版本不再支持Win32s开发）。<br><br>Visual C++ 5.0，集成了MFC 4.21，是4.2版以来比较大的一次升级。<br><br>Visual C++ 6.0，集成了MFC 6.0，于1998发行。发行至今一直被广泛地用于大大小小的项目开发。但是，这个版本在Windows XP下运行会出现问题，尤其是在调试模式的情况下（例如：静态变量的值并不会显示）。这个调试问题可以通过打一个叫&#8220;Visual C++ 6.0 Processor Pack&#8221;的补丁来解决。奇怪的是，这个网页强调用户也必须运行Windows 98、Windows NT 4.0、或Windows 2000。<br><br>Visual C++ .NET 2002（也即Visual C++ 7.0），于2002年发行，集成了MFC 7.0，支持链接时代码生成和调试运行时检查。这个版本还集成了Managed Extension for C++，以及一个全新的用户界面（与Visual Basic和Visual C#共用）。这也是为什么Visual C++ 6.0仍然被广泛使用的一个主要原因。<br><br>Visual C++ .NET 2003（也即Visual C++ 7.1），集成了MFC 7.1，于2003年发行，是对Visual C++ .NET 2002的一次重大升级。<br>eMbedded Visual C++，用于Windows CE操作系统。Visual C++作为一个独立的开发环境被Microsoft Visual Studio 2005所替代。<br><br>Visual C++ 2005（也即Visual C++ 8.0），集成了MFC 8.0，于2005年11月发布。这个版本引进了对C++/CLI语言和OpenMP的支持。<br><br>Visual C++ 2008（也即Visual C++ 9.0），于2007年11月发布。这个版本支持.NET 3.5。<br><br>Visual C++ 2010（也即Visual C++ 10.0），于2010年发布，是目前最新的版本。Visual C++开发团队考虑使用SQL Server Compact格式的数据库来存储源码的相关信息[1].本版也加入了现代化的C++并行运算库-Parallel Patterns Library，部分支持C++0x。本版建构于.NET 4.0之上，但仍支持机器码的编译。</p>
<img src ="http://www.cppblog.com/kusamba/aggbug/125405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-08-31 15:25 <a href="http://www.cppblog.com/kusamba/archive/2010/08/31/125405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]Windows系统下如何使用makefile</title><link>http://www.cppblog.com/kusamba/archive/2010/08/26/124853.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Thu, 26 Aug 2010 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/08/26/124853.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/124853.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/08/26/124853.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/124853.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/124853.html</trackback:ping><description><![CDATA[<br>makefile在windows之外的系统中广泛使用，大多数程序员依赖于vs的IDE; 掌握使用makefile，对于自动化构建很有用<br><br>vs使用nmake.exe作为构建的工具，有别于linux的make<br><br>nmake.exe在vs的安装目录下，<br><br>vs2005的默认目录是：C:\Program Files\Microsoft Visual Studio 8\VC\bin 或者 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin （通常情况下这两个目录下该文件为同一个）<br>vs2003的默认目录是：C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin 或者 C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin<br><br>打开DOS窗口，输入nmake，可能会出现如下错误提示：<br><img alt=""  src="http://www.cppblog.com/images/cppblog_com/kusamba/%E9%9A%8F%E7%AC%94%E8%B4%B4%E5%9B%BE/nmake.png"><br><br>这是因为在vs的安装过程中，没有注册vs的环境变量，可以通过如下方法查看自己是否已经注册好vs的环境变量：<br><br>在DOS窗口中输入set path, 则会看到如下提示：<br><img alt=""  src="http://www.cppblog.com/images/cppblog_com/kusamba/%E9%9A%8F%E7%AC%94%E8%B4%B4%E5%9B%BE/set_path.png"><br><br>我这边已经注册好环境变量了，如果你没有看到，可以将vs的bin目录添加到系统环境目录的path里<br><img alt=""  src="http://www.cppblog.com/images/cppblog_com/kusamba/%E9%9A%8F%E7%AC%94%E8%B4%B4%E5%9B%BE/env_path.png"><br><br>重新打开DOS窗口，输入nmake，如果提示如下，则说明环境目录注册成功：<br><img alt=""  src="http://www.cppblog.com/images/cppblog_com/kusamba/%E9%9A%8F%E7%AC%94%E8%B4%B4%E5%9B%BE/nmakeok.png"><br><br>这时，可以开始我们的编译了，打开DOS窗口，导航到源代码目录，执行nmake，<span style="font-size: 18pt;"><span style="color: red;">注意nmake对应的编译为makefile（无后缀名)</span></span><span style="color: red;"></span><br><br>如果你系统里面有好几个vs版本，建议不要将环境变量添加到path里，我的做法是这样的：<br>1，在C:\下面新建目录utils，并将该目录添加到path的环境变量中<br>2, 将vs2005的bin目录下的vcvars32.bat和vs2003的vcvars32.bat分别copy到C:\Utils目录下，重命名为vc8.bat和vc7.bat<br>3，执行nmake前先执行vc7.bat（使用vs2003编译）或者vc8.bat（使用vS2005编译）<br><br><img src ="http://www.cppblog.com/kusamba/aggbug/124853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-08-26 17:34 <a href="http://www.cppblog.com/kusamba/archive/2010/08/26/124853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>clean_build</title><link>http://www.cppblog.com/kusamba/archive/2010/08/23/124380.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Mon, 23 Aug 2010 02:33:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/08/23/124380.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/124380.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/08/23/124380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/124380.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/124380.html</trackback:ping><description><![CDATA[<br><br>del /s *.obj<br>del /s *.pch<br>del /s vc70.idb<br>del /s *.pdb<br>del /s *.ncb<br>del /s *.suo<br>del /s buildlog.htm<br>
<img src ="http://www.cppblog.com/kusamba/aggbug/124380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-08-23 10:33 <a href="http://www.cppblog.com/kusamba/archive/2010/08/23/124380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vc编译后生成的文件类型</title><link>http://www.cppblog.com/kusamba/archive/2010/08/23/124379.html</link><dc:creator>iKusamba</dc:creator><author>iKusamba</author><pubDate>Mon, 23 Aug 2010 02:31:00 GMT</pubDate><guid>http://www.cppblog.com/kusamba/archive/2010/08/23/124379.html</guid><wfw:comment>http://www.cppblog.com/kusamba/comments/124379.html</wfw:comment><comments>http://www.cppblog.com/kusamba/archive/2010/08/23/124379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kusamba/comments/commentRss/124379.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kusamba/services/trackbacks/124379.html</trackback:ping><description><![CDATA[<h1 class=postTitle><a id=ctl04_TitleUrl class=postTitle2 href="http://www.cnblogs.com/kusamba/archive/2010/08/12/1798259.html"><font color=#1a8bc8></font></a>&nbsp;</h1>
<p>1，&nbsp;PCH文件</p>
<p>预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码.</p>
<p>为什么需要预编译头文件?一言以蔽之:提高编译速度.一般地,编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西(eg.Macro宏,Preprocessor预处理),而VC程序中,这些头文件中所包括的东西往往是非常大的,编译之将占很长的时间.但它们又不常被修改,是较稳定的,为单独的一个小文件而重新编译整个工程的所有文件导致编译效率下降,因此引入了.PCH文件.</p>
<p>如何使用预编译头文件以提高编译速度?要使用预编译头文件,必须指定一个头文件(.H),它包含我们不会经常修改的代码和其他的头文件,然后用这个头文件(.H)来生成一个预编译头文件(.PCH)VC默认的头文件就是StdAfx.h,因为头文件是不能编译的,所以我们还需要一个.CPP文件来作桥梁,VC默认的文件为StdAfx.cpp,这个文件里只有一句代码就是:＃include "StdAfx.h".接下来要用它生成.PCH文件,涉及到几个重要的预编译指令:/Yu,/Yc,/Yx,/Fp.简单地说,/Yc是用来生成.PCH文件的编译开关.在Project-&gt;setting-&gt;C/C++的Category里的Precompiled Header,然后在左边的树形视图中选择用来编译生成.PCH文件的.CPP文件(默认即StdAfx.cpp)你就可以看到/Yc这个开关,它表示这个文件编译了以后是否生成.PCH文件(可能/Yc的c表示create)./Fp指令指定生成的.PCH文件的名字及路径(可能/Fp的p代表path)./Yu的u即use使用,工程中只要包括了.H文件的文件都会有这个/Yu指令.如果选择自动Automatic...的话则原来为/Yc的地方就换成了/Yx指令.如果选择自动,则每次编译时编译器会看以前有没有生成过.PCH文件,有则不现生成否则就再次编译产生.PCH文件.</p>
<p>注意:</p>
<p>A,实际上,由Appzard项目向导生成的默认的头文件及CPP文件StdAfx.h和StdAfx.cpp可以是任何名字的.原因很简单.但如果你要这样做就要记得修改相应的Project-&gt;setting...下的几个预编译指令(/Yc,/Yu,/Yx,/Fp)的参数.</p>
<p>B.在任何一个包括了将要预编译的头文件而使用了.PCH文件的工程文件的开头,一定必须要是在最开头,你要包含那个指定生成.PCH文件的.H文件(通过.CPP文件包括,默认为StdAfx.cpp),如果没包括将产生我最开头产生的错误.如果不是在最开头包括将产生让你意想不到的莫名其妙错误,如若不信,盍为试之?</p>
<p>C.预编译文件.PCH生成之很耗时间,而且生成之后它也很占磁盘空间,常在5<st1:chmetcnv unitname="m" sourcevalue="6" hasspace="False" negative="True" numbertype="1" tcsc="0">-6M</st1:chmetcnv>,注意项目完成之后及时清理无用的.PCH文件以节约磁盘空间.</p>
<p>D.如果丢了或删了.PCH文件而以后要再修改工程文件时,可将指定的/Yc的.CPP文件(默认为StdAfx.cpp)重新编译一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All</p>
<p>&nbsp;<br>2，&nbsp;NCB文件</p>
<p>.ncb 无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。build后会自动生成</p>
<p>&nbsp;<br>3，&nbsp;OBJ文件</p>
<p>目标文件，一般是程序编译后的二进制文件，再通过链接器和资源文件链接就成exe文件了。</p>
<p>OBJ只给出了程序的相对地址，而EXE是绝对地址。</p>
<p>&nbsp;<br>4，&nbsp;PDB文件</p>
<p>程序数据库 (PDB) 文件保存着调试和项目状态信息，使用这些信息可以对程序的调试配置进行增量链接。当以 /ZI 或 /Zi（用于 C/C++）生成时，将创建一个 PDB 文件。</p>
<p>&nbsp;在 Visual C++ 中，/Fd 选项用于命名由编译器创建的PDB 文件。当使用向导在Visual Studio 中创建项目时，/Fd 选项被设置为创建一个名为 project.PDB 的 PDB。</p>
<p>&nbsp;如果使用生成文件创建 C/C++ 应用程序，并指定 /ZI 或 /Zi 而不指定 /Fd 时，则最终将生成两个 PDB 文件：</p>
<p>&nbsp;*VC80.PDB&nbsp;&nbsp; （更笼统地说就是 VCx0.PDB，其中 x 表示 Visual C++ 的版本。）该文件存储各个 OBJ 文件的所有调试信息并与项目生成文件驻留在同一个目录中。</p>
<p>&nbsp;*project.PDB&nbsp;&nbsp; 该文件存储 .exe 文件的所有调试信息。对于C/C++，它驻留在 \debug 子目录中。</p>
<p>每当创建 OBJ 文件时，C/C++ 编译器都将调试信息合并到 VCx0.PDB 中。插入的信息包括类型信息，但不包括函数定义等符号信息。因此，即使每个源文件都包含公共头文件（如 &lt;windows.h&gt;），这些头文件中的 typedef 也只存储一次，而不是在每个 OBJ 文件中都存在。</p>
<p>&nbsp;链接器将创建 project.PDB，它包含项目的 EXE 文件的调试信息。project.PDB文件包含完整的调试信息（包括函数原型），而不仅仅是在 VCx0.PDB 中找到的类型信息。这两个 PDB 文件都允许增量更新。链接器还在其创建的 .exe 或 .dll 文件中嵌入 .pdb 文件的路径。</p>
<p>&nbsp;Visual Studio 调试器使用 EXE 或 DLL 文件中的PDB 路径查找 project.PDB 文件。如果调试器在该位置无法找到 PDB 文件或者如果路径无效（例如，如果项目被移动到了另一台计算机上），调试器将搜索包含 EXE 的路径，即在&#8220;选项&#8221;对话框（&#8220;调试&#8221;文件夹，&#8220;符号&#8221;节点）中指定的符号路径。调试器不会加载与所调试的二进制不匹配的 PDB。</p>
<p>&nbsp;<br>5，&nbsp;ILK文件</p>
<p>在增量链接时，LINK 更新在第一次增量链接期间创建的 .ilk 状态文件。该文件和 .exe文件或 .dll 文件具有相同的基名称，并具有扩展名 .ilk。在后面的增量链接期间，LINK 更新 .ilk 文件。如果缺少 .ilk 文件，则 LINK 执行完全链接并创建新的 .ilk 文件。如果 .ilk 文件无法使用，则 LINK 执行非增量链接。有关增量链接的详细信息，请参见渐进式链接(/INCREMENTAL) 选项。</p>
<p>&nbsp;<br>6，&nbsp;MAP文件</p>
<p>Windows和Linux系统下都有map文件，map文件一般是用来保存符号的地址信息。这里的符号一般是指函数名及变量（局部、全局）。根据这个地址信息，便可以把地址翻译成相应的符号，很多系统工具、debug方法都要用到这种信息。</p>
<p>&nbsp;（一）一个程序编译完以后内容会分成两大类保存，一类是code，一类是data：</p>
<p>（1）code指程序代码，常存在.text section</p>
<p>（2）data指存程序中声明的变量，常存在.data section，未初始化的变量会被存在.bss section。</p>
<p>&nbsp;（二）Windows</p>
<p>（1）单个模块的map文件</p>
<p>在Windows下每一个模块（dll/exe）对应一个map文件，只需编译时打开相应的选项即可。</p>
<p>visual studio中方法：右击工程，选择Properties，然后选择 Configuration Properties -Linker - Debugging，将Generate Map File项改成Yes。</p>
<p>编译后在debug/release目录里便可以找到与应用程序同名的map文件。</p>
<p>&nbsp;如下为map文件内容：</p>
<p>Timestamp is4b9603e2 (Tue Mar 09 16:16:34 2010) //这个是时间戳，每次编译都不同，后面符号对应的地址一般也不同。</p>
<p>&nbsp;Preferred loadaddress is 00010000 //这是编译时的预装载地址，实际上模块被加载的地址可能跟这个不同，所以来确定某个地址对应哪个符号信息的时候，还需要知道该模块加载在内存的真正起始地址，然后根据偏移量来确定。</p>
<p>&nbsp;Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Length&nbsp;&nbsp;&nbsp;&nbsp; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class</p>
<p>0001:00000000 <st1:chmetcnv unitname="C" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">001c</st1:chmetcnv>3950H .text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CODE ==》存放程序代码</p>
<p>0003:000008b8000af67cH .data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA ==》初始化的变量</p>
<p>0003:000aff40003930b1H .bss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA ==》未初始化的变量</p>
<p>&nbsp;（2）操作系统总的map文件：不知道有没有。</p>
<p>&nbsp;（3）dumpbin</p>
<p>dumpbin是一个反汇编工具，可以输出exe/dll文件的许多信息。</p>
<p>dumpbin /allyourmodulename &gt; a.txt 可以把所有的信息保存在一个a.txt中，里面可以找到时间戳、原debug路径信息及函数列表等。</p>
<p>&nbsp;如下：</p>
<p>FILE HEADERVALUES</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <st1:chmetcnv unitname="C" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1C</st1:chmetcnv>2 machine (Thumb)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6 number of sections</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49EC0BAE time date stamp Mon Apr 2013:44:14 2009 //时间戳</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 file pointer to symbol table</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 number of symbols</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E0 size of optional header</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2102 characteristics</p>
<p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Executable</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32 bit word machine</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DLL</p>
<p>&nbsp;</p>
<p>OPTIONAL HEADERVALUES</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10B magic # (PE32)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.00 linker version</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53E00 size of code</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <st1:chmetcnv unitname="a" sourcevalue="76" hasspace="False" negative="False" numbertype="1" tcsc="0">76A</st1:chmetcnv>00size of initialized data</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 size of uninitialized data</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <st1:chmetcnv unitname="ac" sourcevalue="502" hasspace="False" negative="False" numbertype="1" tcsc="0">502AC</st1:chmetcnv>entry point (<st1:chmetcnv unitname="ac" sourcevalue="100502" hasspace="False" negative="False" numbertype="1" tcsc="0">100502AC</st1:chmetcnv>)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1000 base of code</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 55000 base of data</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000000 image base (10000000 to100CDFFF)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1000 section alignment</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200 file alignment</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.01 operating system version</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00 image version</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.01 subsystem version</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 Win32 version</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CE000 size of image</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 400 size of headers</p>
<p>&nbsp;</p>
<p>其中 10000000 image base (10000000 to 100CDFFF)是重要的信息，与map file中的 Preferred load address is10000000 意义相同。</p>
<p>&nbsp;DebugDirectories</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RVA Pointer</p>
<p>&nbsp;&nbsp;&nbsp; -------- ------ -------- -------- --------</p>
<p>&nbsp;&nbsp;&nbsp; 49EC0BAE cv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 81 000020FC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFC&nbsp;&nbsp;&nbsp;Format: RSDS, {A<st1:chmetcnv unitname="C" sourcevalue="5" hasspace="False" negative="False" numbertype="1" tcsc="0">5C</st1:chmetcnv><st1:chmetcnv unitname="F" sourcevalue="699" hasspace="False" negative="False" numbertype="1" tcsc="0">699F</st1:chmetcnv>0-C26D-427E-BC54-3504731BA9B8}, 1,d:\Projects\Final\MyUsbToPc_CPL\MyUsbToPc\Windows Mobile 6 Professional SDK(ARMV4I)\Debug\MyUsbToPc.pdb //原编译路径</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Begin&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prolog&nbsp;&nbsp; Excpt 32bit Fixup 【Function Name】</p>
<p>&nbsp;0000000010001000 10001040 10001010&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp;Y DllMain</p>
<p>0000000810001040 10001064 10001050&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp;Y ?InitApplet@@YAHPAUHWND__@@@Z (int __cdecl InitApplet(struct HWND__*))</p>
<p>0000001010001064 10001068 10001064&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp;Y ?TermApplet@@YAXXZ (void __cdecl TermApplet(void))</p>
<p>0000001810001068 100013DC 10001078&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp;Y CPlApplet</p>
<p>00000020 <st1:chmetcnv unitname="C" sourcevalue="1000141" hasspace="False" negative="False" numbertype="1" tcsc="0">1000141C</st1:chmetcnv> 100014B4 10001420&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;Y&nbsp;&nbsp;&nbsp;&nbsp; Y _DllMainCRTStartup</p>
<p>00000028100014B4 100014BC 100014B4&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp;Y GetCurrentProcess</p>
<p>00000030100014BC <st1:chmetcnv unitname="F" sourcevalue="100014" hasspace="False" negative="False" numbertype="1" tcsc="0">100014F</st1:chmetcnv>0 <st1:chmetcnv unitname="C" sourcevalue="100014" hasspace="False" negative="False" numbertype="1" tcsc="0">100014C</st1:chmetcnv>0&nbsp;&nbsp;N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp; Y</p>
<p>00000038 <st1:chmetcnv unitname="F" sourcevalue="100014" hasspace="False" negative="False" numbertype="1" tcsc="0">100014F</st1:chmetcnv>0 <st1:chmetcnv unitname="C" sourcevalue="1000155" hasspace="False" negative="False" numbertype="1" tcsc="0">1000155C</st1:chmetcnv> <st1:chmetcnv unitname="F" sourcevalue="100014" hasspace="False" negative="False" numbertype="1" tcsc="0">100014F</st1:chmetcnv>4&nbsp;&nbsp;N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp; Y _cinit</p>
<p>00000040 <st1:chmetcnv unitname="C" sourcevalue="1000155" hasspace="False" negative="False" numbertype="1" tcsc="0">1000155C</st1:chmetcnv> 10001660 10001560&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;Y&nbsp;&nbsp;&nbsp;&nbsp; Y</p>
<p>0000004810001660 10001678 10001664&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp;Y exit</p>
<p>0000005010001678 10001690 <st1:chmetcnv unitname="C" sourcevalue="1000167" hasspace="False" negative="False" numbertype="1" tcsc="0">1000167C</st1:chmetcnv>&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;Y&nbsp;&nbsp;&nbsp;&nbsp; Y _exit</p>
<p>0000005810001690 <st1:chmetcnv unitname="ac" sourcevalue="100016" hasspace="False" negative="False" numbertype="1" tcsc="0">100016AC</st1:chmetcnv>10001694&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp;&nbsp;&nbsp;Y _cexit</p>
<p>00000060 <st1:chmetcnv unitname="ac" sourcevalue="100016" hasspace="False" negative="False" numbertype="1" tcsc="0">100016AC</st1:chmetcnv> <st1:chmetcnv unitname="F" sourcevalue="100016" hasspace="False" negative="False" numbertype="1" tcsc="0">100016F</st1:chmetcnv>8 100016B0&nbsp;&nbsp; N&nbsp;&nbsp;&nbsp;&nbsp;Y&nbsp;&nbsp;&nbsp;&nbsp; Y _c_exit</p>
<p>&nbsp;</p>
<p>begin栏对应的地址与map里的地址是一致的，非常类似于map文件。</p>
<p>【注意：很多exe或dll在编译时时将此信息隐藏的，Function Name会变成空的】</p>
<p>&nbsp;（三）Linux</p>
<p>（1）单个模块的map文件</p>
<p>暂还不清楚，大家知道的请告知。</p>
<p>（2）操作系统总的map文件</p>
<p>linux系统编译Image后会生成一个system.map，里面存了被编译进内核的符号信息，不同次的编译生成的system.map会有差异。</p>
<p>因为是操作系统的符号信息，装载的地址都是固定的，所以不像windows单个模块那样靠偏移量定位，直接通过地址就可以直接找到对应的符号。</p>
<p>&nbsp;</p>
<p>其内容的重要的几个符号如下：</p>
<p>_stext//代码段开始</p>
<p>_etext//代码段结束</p>
<p>&nbsp;__data_start//初始化的数据开始</p>
<p>_edata//初始化的数据结束</p>
<p>&nbsp;__bss_start//未初始化数据开始</p>
<p>_end//全部结束</p>
<p>&nbsp;</p>
<p>Linux相对windows有个很重要的不同是，linux启动后在proc\kallsyms里也有一份类似Map文件的信息，cat命令可看到其内容，有了这个就可以得到任何一个内核的符号（变量及函数名）的地址信息，而不需要在编译完内核后特意保存map文件，这真是一个巨大的宝藏。</p>
<p>而且，proc\kallsym的信息比system.map多，在最后会有module部分的符号信息，这些信息会随着系统的变化而变化。</p>
<p>&nbsp;</p>
<p>（3）nm命令</p>
<p>nm命令用来显示某个可执行文件的符号信息。符号信息中会包含全局变量（比如下面的xyz）和函数名（比如下面的main），还有一些编译器插入的符号（比如下面的__data_start,__bss_start）</p>
<p>&nbsp;第二列表示符号的属性，其中大写代表global，小写代表local</p>
<p>&nbsp;</p>
<p>Usage: nm[option(s)] [file(s)]</p>
<p>List symbols in[file(s)] (a.out by default).</p>
<p>&nbsp;</p>
<p>示例：</p>
<p>&nbsp;nm helo</p>
<p>&nbsp;<st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv>20 d_DYNAMIC</p>
<p>08049ff4 d_GLOBAL_OFFSET_TABLE_</p>
<p>080484ec R_IO_stdin_used</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w _Jv_RegisterClasses</p>
<p><st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv>10 d__CTOR_END__</p>
<p><st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv><st1:chmetcnv unitname="C" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">0c</st1:chmetcnv> d__CTOR_LIST__</p>
<p><st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv>18 D__DTOR_END__</p>
<p><st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv>14 d__DTOR_LIST__</p>
<p>08048500 r__FRAME_END__</p>
<p><st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv><st1:chmetcnv unitname="C" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1c</st1:chmetcnv> d__JCR_END__</p>
<p><st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv><st1:chmetcnv unitname="C" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1c</st1:chmetcnv> d__JCR_LIST__</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv><st1:chmetcnv unitname="a" sourcevalue="20" hasspace="True" negative="False" numbertype="1" tcsc="0">020 A</st1:chmetcnv>__bss_start</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv><st1:chmetcnv unitname="C" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">00c</st1:chmetcnv> D__data_start</p>
<p><st1:chmetcnv unitname="a" sourcevalue="80484" hasspace="False" negative="False" numbertype="1" tcsc="0">080484a</st1:chmetcnv>0 t __do_global_ctors_aux</p>
<p>08048340 t__do_global_dtors_aux</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv>010 D__dso_handle</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w __gmon_start__</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804849" hasspace="False" negative="False" numbertype="1" tcsc="0">0804849a</st1:chmetcnv> T __i686.get_pc_thunk.bx</p>
<p><st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv><st1:chmetcnv unitname="C" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">0c</st1:chmetcnv> d__init_array_end</p>
<p><st1:chmetcnv unitname="F" sourcevalue="8049" hasspace="False" negative="False" numbertype="1" tcsc="0">08049f</st1:chmetcnv><st1:chmetcnv unitname="C" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">0c</st1:chmetcnv> d__init_array_start</p>
<p>08048430 T__libc_csu_fini</p>
<p>08048440 T__libc_csu_init</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; U __libc_start_main@@GLIBC_2.0</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv><st1:chmetcnv unitname="a" sourcevalue="20" hasspace="True" negative="False" numbertype="1" tcsc="0">020 A</st1:chmetcnv> _edata</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv><st1:chmetcnv unitname="a" sourcevalue="28" hasspace="True" negative="False" numbertype="1" tcsc="0">028 A</st1:chmetcnv> _end</p>
<p>080484cc T _fini</p>
<p>080484e8 R_fp_hw</p>
<p>08048298 T _init</p>
<p>08048310 T_start</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv>020 bcompleted.6635</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv><st1:chmetcnv unitname="C" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">00c</st1:chmetcnv> Wdata_start</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv>024 bdtor_idx.6637</p>
<p><st1:chmetcnv unitname="a" sourcevalue="80483" hasspace="False" negative="False" numbertype="1" tcsc="0">080483a</st1:chmetcnv>0 t frame_dummy</p>
<p><st1:chmetcnv unitname="C" sourcevalue="80483" hasspace="False" negative="False" numbertype="1" tcsc="0">080483c</st1:chmetcnv>4 T main</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; U printf@@GLIBC_2.0</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv>014 D x</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv>018 D y</p>
<p><st1:chmetcnv unitname="a" sourcevalue="804" hasspace="False" negative="False" numbertype="1" tcsc="0">0804a</st1:chmetcnv><st1:chmetcnv unitname="C" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">01c</st1:chmetcnv> D z</p>
<p>&nbsp;</p>
<p>helo.c如下：</p>
<p>#include&lt;stdio.h&gt;</p>
<p>&nbsp;int x = 10;</p>
<p>int y = 20;</p>
<p>int z = 30;</p>
<p>&nbsp;extern int__data_start;//这里引用了编译器插入的符号</p>
<p>&nbsp;int main(void)</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int *ds = &amp;__data_start;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%p\n", ds);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("now x = %d\n", x);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds+=3;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *ds = 100;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("now x = %d\n", x);</p>
<p>}</p>
<p>7，&nbsp;IDB文件</p>
<p>The compiler savesstate information from the first compile in the project&#8217;s .IDB file&nbsp;&nbsp;&nbsp;&nbsp; (the default name is project.IDB or VC60.IDBfor files compiled without a project). </p>
<p>The compiler usesthis state information to speed subsequent compiles.</p>
<p>&nbsp;</p>
<p>8，&nbsp;SLN文件</p>
<p>Visual&nbsp;&nbsp; Studio.Solution&nbsp;&nbsp; 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用，可将它们组织到解决方案中。&nbsp;&nbsp;&nbsp;&nbsp; 比如是生成Debug模式,还是Release模式,是通用CPU还是专用的等</p>
<p>&nbsp;</p>
<p>9，&nbsp;SUO文件</p>
<p>解决方案用户选项&nbsp;&nbsp; 记录所有将与解决方案建立关联的选项，以便在每次打开时，它都包含您所做的自定义设置。比如你的VS布局,你的项目最后编译的而又没有关掉的文件(下次打开时用)</p>
<p>10，&nbsp;&nbsp;</p>
<img src ="http://www.cppblog.com/kusamba/aggbug/124379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kusamba/" target="_blank">iKusamba</a> 2010-08-23 10:31 <a href="http://www.cppblog.com/kusamba/archive/2010/08/23/124379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>