﻿<?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++博客-yutou's blog</title><link>http://www.cppblog.com/luyu16404/</link><description>请不要做浮躁的人，请热爱C++。</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 19:52:23 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 19:52:23 GMT</pubDate><ttl>60</ttl><item><title>&lt;沟通使您更有魅力&gt;</title><link>http://www.cppblog.com/luyu16404/archive/2008/04/20/47677.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Sun, 20 Apr 2008 09:52:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/04/20/47677.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/47677.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/04/20/47677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/47677.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/47677.html</trackback:ping><description><![CDATA[du8.com的书..很不错..但是要VIP,,,又是VIP<br><br><a href="http://pic.du8.com/onlineimg/31/bp/sep/2003/31bp.0001.png">http://pic.du8.com/onlineimg/31/bp/sep/2003/31bp.0001.png</a><br><br>这本书的地址是从这里开始的,,,0002 0003 &#8230;0100&#8230;N
<img src ="http://www.cppblog.com/luyu16404/aggbug/47677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-04-20 17:52 <a href="http://www.cppblog.com/luyu16404/archive/2008/04/20/47677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL参考手册(基于ms sql 2000 help system)</title><link>http://www.cppblog.com/luyu16404/archive/2008/04/10/46783.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Thu, 10 Apr 2008 14:55:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/04/10/46783.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/46783.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/04/10/46783.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/46783.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/46783.html</trackback:ping><description><![CDATA[很好的一个小册子,不大不小,却是一个学习的好帮手.放此收藏.<br><br>感谢<strong><font size=2>LXH2002的收集整理.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;-)</font></strong>
<img src ="http://www.cppblog.com/luyu16404/aggbug/46783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-04-10 22:55 <a href="http://www.cppblog.com/luyu16404/archive/2008/04/10/46783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于new与delete</title><link>http://www.cppblog.com/luyu16404/archive/2008/04/07/46437.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Mon, 07 Apr 2008 09:24:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/04/07/46437.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/46437.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/04/07/46437.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/46437.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/46437.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">i&nbsp;,</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pk;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>pk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;p;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>delete&nbsp;pk;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">错误<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">不能delete一个不是new分配的空间<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">i;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;p;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>delete&nbsp;p;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正确<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">p与pk指向同一个内存区域，而这个内存区域是由new产生</span></div>
<img src ="http://www.cppblog.com/luyu16404/aggbug/46437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-04-07 17:24 <a href="http://www.cppblog.com/luyu16404/archive/2008/04/07/46437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用if遇到的一点问题</title><link>http://www.cppblog.com/luyu16404/archive/2008/04/07/46436.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Mon, 07 Apr 2008 09:06:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/04/07/46436.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/46436.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/04/07/46436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/46436.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/46436.html</trackback:ping><description><![CDATA[在if else if 使用中出现的一点问题，编译器报出&#8220;在return的前面缺少 ';' &#8221;<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;compare(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;shu_size&nbsp;,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;vector&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">_vec&nbsp;)<br><img id=Codehighlighter1_54_238_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_238_Open_Text.style.display='none'; Codehighlighter1_54_238_Closed_Image.style.display='inline'; Codehighlighter1_54_238_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_54_238_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_238_Closed_Text.style.display='none'; Codehighlighter1_54_238_Open_Image.style.display='inline'; Codehighlighter1_54_238_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_54_238_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_54_238_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;vec_size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">(_vec.size());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;shu_size&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;vec_size&nbsp;)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;shu_size;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;shu_size&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;vec_size&nbsp;)&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;shu_size;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;(&nbsp;shu_size&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;vec_size&nbsp;)&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;vec_size;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br><br>//更改后通过编译的代码<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;compare(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;shu_size&nbsp;,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;vector&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">_vec&nbsp;)<br><img id=Codehighlighter1_54_157_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_157_Open_Text.style.display='none'; Codehighlighter1_54_157_Closed_Image.style.display='inline'; Codehighlighter1_54_157_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_54_157_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_157_Closed_Text.style.display='none'; Codehighlighter1_54_157_Open_Image.style.display='inline'; Codehighlighter1_54_157_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_54_157_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_54_157_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;vec_size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">(_vec.size());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;shu_size&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;vec_size&nbsp;)&nbsp;vec_size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;shu_size;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;vec_size;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>
<img src ="http://www.cppblog.com/luyu16404/aggbug/46436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-04-07 17:06 <a href="http://www.cppblog.com/luyu16404/archive/2008/04/07/46436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vector类型的常对象与iterator常对象的对应使用</title><link>http://www.cppblog.com/luyu16404/archive/2008/04/07/46435.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Mon, 07 Apr 2008 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/04/07/46435.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/46435.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/04/07/46435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/46435.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/46435.html</trackback:ping><description><![CDATA[<p>code:<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">出现error&nbsp;C2440</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;is_equal(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;vector&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ivec&nbsp;)&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">vector对象的常引用</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_74_205_Open_Image onclick="this.style.display='none'; Codehighlighter1_74_205_Open_Text.style.display='none'; Codehighlighter1_74_205_Closed_Image.style.display='inline'; Codehighlighter1_74_205_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_74_205_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_205_Closed_Text.style.display='none'; Codehighlighter1_74_205_Open_Image.style.display='inline'; Codehighlighter1_74_205_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_74_205_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_74_205_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(&nbsp;vector&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::iterator&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ivec.begin()&nbsp;;it&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;ivec.end()&nbsp;;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it&nbsp;)&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里使用的是iterator</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_178_203_Open_Image onclick="this.style.display='none'; Codehighlighter1_178_203_Open_Text.style.display='none'; Codehighlighter1_178_203_Closed_Image.style.display='inline'; Codehighlighter1_178_203_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_178_203_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_178_203_Closed_Text.style.display='none'; Codehighlighter1_178_203_Open_Image.style.display='inline'; Codehighlighter1_178_203_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_178_203_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_178_203_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p><br><br>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正确的使用方法</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;is_equal(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;vector&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ivec&nbsp;)&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">vector对象的常引用</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_68_211_Open_Image onclick="this.style.display='none'; Codehighlighter1_68_211_Open_Text.style.display='none'; Codehighlighter1_68_211_Closed_Image.style.display='inline'; Codehighlighter1_68_211_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_68_211_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_68_211_Closed_Text.style.display='none'; Codehighlighter1_68_211_Open_Image.style.display='inline'; Codehighlighter1_68_211_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_68_211_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_68_211_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(&nbsp;vector&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ivec.begin()&nbsp;;it&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;ivec.end()&nbsp;;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it&nbsp;)&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里使用的是const_iterator</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_184_209_Open_Image onclick="this.style.display='none'; Codehighlighter1_184_209_Open_Text.style.display='none'; Codehighlighter1_184_209_Closed_Image.style.display='inline'; Codehighlighter1_184_209_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_184_209_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_209_Closed_Text.style.display='none'; Codehighlighter1_184_209_Open_Image.style.display='inline'; Codehighlighter1_184_209_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_184_209_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_184_209_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p><br><br>ps:标准库相当复杂！</p>
<img src ="http://www.cppblog.com/luyu16404/aggbug/46435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-04-07 16:58 <a href="http://www.cppblog.com/luyu16404/archive/2008/04/07/46435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]讲讲volatile的作用</title><link>http://www.cppblog.com/luyu16404/archive/2008/04/06/46380.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Sun, 06 Apr 2008 09:29:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/04/06/46380.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/46380.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/04/06/46380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/46380.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/46380.html</trackback:ping><description><![CDATA[<p>信息来源:http://blog.21ic.com/user1/2949/archives/2007/35599.html<br><br></p>
<div>一个定义为volatile的变量是说这变量可能会被意想不到地改变，这样，编译器就不会去假设这个变量的值了。精确地说就是，优化器在用到这个变量时必须每次都小心地重新读取这个变量的值，而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子： <br>&nbsp;&nbsp;&nbsp;&nbsp;1).&nbsp;并行设备的硬件寄存器（如：状态寄存器） <br>&nbsp;&nbsp;&nbsp;&nbsp;2).&nbsp;一个中断服务子程序中会访问到的非自动变量(Non-automatic&nbsp;variables) <br>&nbsp;&nbsp;&nbsp;&nbsp;3).&nbsp;多线程应用中被几个任务共享的变量 <br>&nbsp;&nbsp;&nbsp;&nbsp;回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道，所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。 <br>&nbsp;&nbsp;&nbsp;&nbsp;假设被面试者正确地回答了这是问题（嗯，怀疑这否会是这样），我将稍微深究一下，看一下这家伙是不是直正懂得volatile完全的重要性。 <br>&nbsp;&nbsp;&nbsp;&nbsp;1).&nbsp;一个参数既可以是const还可以是volatile吗？解释为什么。 <br>&nbsp;&nbsp;&nbsp;&nbsp;2).&nbsp;一个指针可以是volatile&nbsp;吗？解释为什么。 <br>&nbsp;&nbsp;&nbsp;&nbsp;3).&nbsp;下面的函数有什么错误： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;square(volatile&nbsp;int&nbsp;*ptr) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;*ptr&nbsp;*&nbsp;*ptr; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;下面是答案： <br>&nbsp;&nbsp;&nbsp;&nbsp;1).&nbsp;是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 <br>&nbsp;&nbsp;&nbsp;&nbsp;2).&nbsp;是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 <br>&nbsp;&nbsp;&nbsp;&nbsp;3).&nbsp;这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方，但是，由于*ptr指向一个volatile型参数，编译器将产生类似下面的代码： <br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;square(volatile&nbsp;int&nbsp;*ptr)&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a,b; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;*ptr; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;*ptr; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;*&nbsp;b; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;由于*ptr的值可能被意想不到地该变，因此a和b可能是不同的。结果，这段代码可能返不是你所期望的平方值！正确的代码如下： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;square(volatile&nbsp;int&nbsp;*ptr)&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;*ptr; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;*&nbsp;a; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br></div>
<img src ="http://www.cppblog.com/luyu16404/aggbug/46380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-04-06 17:29 <a href="http://www.cppblog.com/luyu16404/archive/2008/04/06/46380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中的类型重定义</title><link>http://www.cppblog.com/luyu16404/archive/2008/03/10/44096.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Mon, 10 Mar 2008 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/03/10/44096.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/44096.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/03/10/44096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/44096.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/44096.html</trackback:ping><description><![CDATA[<span lang=zh-CN style="FONT-FAMILY: simsun"><span style="FONT-STYLE: italic; FONT-FAMILY: Arial; TEXT-DECORATION: underline">By SmartPtr(</span><a title=http://www.cppblog.com/SmartPtr/ style="FONT-STYLE: italic; FONT-FAMILY: arial; TEXT-DECORATION: underline" href="http://www.cppblog.com/SmartPtr/"><font color=#4371a6>http://www.cppblog.com/SmartPtr/)</font></a></span><span lang=zh-CN style="FONT-FAMILY: simsun"><span style="FONT-STYLE: italic; FONT-FAMILY: Arial; TEXT-DECORATION: underline"></span><a title=http://www.cppblog.com/SmartPtr/ style="FONT-STYLE: italic; FONT-FAMILY: arial; TEXT-DECORATION: underline" href="http://www.cppblog.com/SmartPtr/"></a><br><br></span>这几天工作时碰到一个<span lang=EN-US style="FONT-FAMILY: 'courier new'">C++</span><span>的编译错误</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">(</span><span>我使用的是</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Visual C++ 7.0)</span><span>，说是有一个类重复定义，仔细想想我们的这个项目也是做了好几个</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Release</span><span>了，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>内部代码应该不会有这样的低级错误，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>真把类型给重复定义了，检查结果正如我预料的一样。</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>就这样，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>我左右没找到原因，被一个编译错误给卡在那里了。（在我的概念中，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>程序错误的等级为：编译错误－</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">&gt;</span><span>链接错误－</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">&gt;</span><span>逻辑错误，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>此错误属于最低级</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>）。这时我仔细看了一下错误提示，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>发现重复定义是由于从两个不同的路径包含了同一个头文件而引起的，同事也建议从另外一个路径打开工程试试，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>这才慢慢发现了原因。这个原因可能有些拗口，而事实上要出现这种错误也有些</span><span>&#8220;</span><span>曲折</span><span>&#8220;</span><span>，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>让我从不同情况下的类型重定义来解释一下吧。</span><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span>
<p class=MsoPlainText><span></span></p>
<p class=MsoPlainText><span>我总结的C++中类型重定义情况有三。</span><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span></p>
<p class=MsoPlainText><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">1 </span></strong><strong><span>没有在文件头加</span></strong><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">#pragma once</span></strong><strong><span>指示符。<br><br></span></strong><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type1.h:</span></strong><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'"></span></strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">&nbsp; #pragma once</span><span>的作用是保证本文件只被编译一次，</span><span>如果没有在</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type1.h</span><span>中加这句话</span><span>，</span><span>那么在</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">main.cpp</span><span>里面包含了两次</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type1.h</span><span>，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>就相当于在</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">main.cpp</span><span>里面定义了两次</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type</span><span>类，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>自然就是类型重定义了。</span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">#pragma&nbsp;once</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Type<br><img id=Codehighlighter1_26_28_Open_Image onclick="this.style.display='none'; Codehighlighter1_26_28_Open_Text.style.display='none'; Codehighlighter1_26_28_Closed_Image.style.display='inline'; Codehighlighter1_26_28_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_26_28_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_26_28_Closed_Text.style.display='none'; Codehighlighter1_26_28_Open_Image.style.display='inline'; Codehighlighter1_26_28_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_26_28_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_26_28_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>Main.cpp:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Type1.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Type1.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br><img id=Codehighlighter1_71_86_Open_Image onclick="this.style.display='none'; Codehighlighter1_71_86_Open_Text.style.display='none'; Codehighlighter1_71_86_Closed_Image.style.display='inline'; Codehighlighter1_71_86_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_71_86_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_71_86_Closed_Text.style.display='none'; Codehighlighter1_71_86_Open_Image.style.display='inline'; Codehighlighter1_71_86_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_71_86_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_71_86_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>
<p class=MsoPlainText><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">2 </span></strong><strong><span>两个不同的头文件中定义了相同的类型（均有</span></strong><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">#pragma once</span></strong><strong><span>）<br><br></span></strong><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type1.h:</span></strong><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type2.h:</span></strong><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">Main.cpp:<o:p></o:p></span></strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#pragma&nbsp;once<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Type<br><img id=Codehighlighter1_24_27_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_27_Open_Text.style.display='none'; Codehighlighter1_24_27_Closed_Image.style.display='inline'; Codehighlighter1_24_27_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_24_27_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_27_Closed_Text.style.display='none'; Codehighlighter1_24_27_Open_Image.style.display='inline'; Codehighlighter1_24_27_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_24_27_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_24_27_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#pragma&nbsp;once<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Type<br><img id=Codehighlighter1_24_32_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_32_Open_Text.style.display='none'; Codehighlighter1_24_32_Closed_Image.style.display='inline'; Codehighlighter1_24_32_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_24_32_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_32_Closed_Text.style.display='none'; Codehighlighter1_24_32_Open_Image.style.display='inline'; Codehighlighter1_24_32_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_24_32_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_24_32_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
<br><br>这里<span lang=EN-US style="FONT-FAMILY: 'courier new'">main.cpp</span><span>中同时包含了</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type1.h, Type2.h</span><span>两个头文件，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>虽然其文件头都有</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#pragma once</span><span>，但因为是不同的文件，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>预编译器还是会两次把</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type</span><span>类的定义放在</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Main.cpp</span><span>中，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>所以也会出现了重定义。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Type1.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Type2.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br><img id=Codehighlighter1_71_86_Open_Image onclick="this.style.display='none'; Codehighlighter1_71_86_Open_Text.style.display='none'; Codehighlighter1_71_86_Closed_Image.style.display='inline'; Codehighlighter1_71_86_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_71_86_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_71_86_Closed_Text.style.display='none'; Codehighlighter1_71_86_Open_Image.style.display='inline'; Codehighlighter1_71_86_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_71_86_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_71_86_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>
<p class=MsoPlainText><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">3 </span></strong><strong><span>从两个不同的路径包含了同一个头文件</span></strong><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span></strong></p>
<p class=MsoPlainText><span><font face="Courier New">&nbsp; </font>前面两种是比较常见，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>也是比较容易解决的情况，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>而这里要讲的第三种情况，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>比较少见，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>而且一般出现在有虚拟映射盘的时候。（这样才能做到从两个不同的路径包含同一个头文件），</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>其他会在什么时候出现，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>我还没想到，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>知道的朋友顶一下：）。下面我来分析一下：<br></span><span lang=EN-US style="FONT-FAMILY: 'courier new'">1</span><span>）</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>有</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">VC</span><span>工程在</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">D:\Test</span><span>目录下。<br></span><span lang=EN-US style="FONT-FAMILY: 'courier new'">2</span><span>）</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>映射虚拟盘</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">X</span><span>为</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">D:\Test. <br></span><em><span>不熟悉的网友可以按此操作</span></em><em><span lang=EN-US style="FONT-FAMILY: 'courier new'">: </span></em><em><span>开始</span></em><em><span lang=EN-US style="FONT-FAMILY: 'courier new'">-&gt;</span></em><em><span>运行</span></em><em><span lang=EN-US style="FONT-FAMILY: 'courier new'">-&gt;</span></em><em><span>在运行窗口输入：</span></em><em><span lang=EN-US style="FONT-FAMILY: 'courier new'">cmd-&gt;</span></em><em><span>在</span></em><em><span lang=EN-US style="FONT-FAMILY: 'courier new'">cmd</span></em><em><span>窗口输入：<br></span></em><em><span lang=EN-US style="FONT-FAMILY: 'courier new'">Subst X: D:\Test-&gt;</span></em><em><span>回车。<br></span></em><span lang=EN-US style="FONT-FAMILY: 'courier new'">3</span><span>）</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>该工程有文件</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type1.h, main.cpp<o:p></o:p></span></p>
<p class=MsoPlainText><strong><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type1.h:<o:p></o:p></span></strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#pragma&nbsp;once<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Type<br><img id=Codehighlighter1_24_27_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_27_Open_Text.style.display='none'; Codehighlighter1_24_27_Closed_Image.style.display='inline'; Codehighlighter1_24_27_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_24_27_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_27_Closed_Text.style.display='none'; Codehighlighter1_24_27_Open_Image.style.display='inline'; Codehighlighter1_24_27_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_24_27_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_24_27_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
<br>
<p class=MsoPlainText>Main.cpp:<o:p></o:p></p>
<p class=MsoPlainText><span></span><span lang=EN-US style="FONT-FAMILY: 'courier new'">main.cpp</span><span>这样包含了两个头文件，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>从本质上来讲，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>它们都对应于物理盘</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">D:\Test</span><span>下的文件</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type1.h, </span><span>是同一个文件。</span><span>但在不同的操作下，</span><span lang=EN-US style="FONT-FAMILY: 'courier new'"> VC</span><span>对其有不同的解释。</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#include "X:\Type1.h"</span><span>用的是绝对路径，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>自然没有什么异议，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>但</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#include "Type1.h"</span><span>却有些变化</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">:<br></span><span><font face="Courier New">*</font>假如我从</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">D:\Test\</span><span>下打开工程，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>那么</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#include "Type1.h"</span><span>其实就是</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#include "D:\Test\Type1.h" <br></span><span>*假如从</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">X:\</span><span>下打开工程，那么</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#include "Type1.h"</span><span>就解释为</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#include "X:\Type1.h"</span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><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">Type1.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">X:Type1.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br><img id=Codehighlighter1_73_88_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_88_Open_Text.style.display='none'; Codehighlighter1_73_88_Closed_Image.style.display='inline'; Codehighlighter1_73_88_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_73_88_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_88_Closed_Text.style.display='none'; Codehighlighter1_73_88_Open_Image.style.display='inline'; Codehighlighter1_73_88_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_73_88_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_73_88_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>这里我们在
<p class=MsoPlainText><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US style="FONT-FAMILY: 'courier new'">4</span><span>）</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>在</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">D:\Test</span><span>下打开工程，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>编译，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>出现类型</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Type</span><span>重复定义错误</span><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span></p>
<p class=MsoPlainText><span>这种情况下，</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">main.cpp</span><span>预编译为</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">:<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US style="FONT-FAMILY: 'courier new'">Main.cpp:<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US style="FONT-FAMILY: 'courier new'"></span><span>只保证本文件被编译一次，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>这里</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">VC</span><span>将其认为是两个不同的文件，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>所以都要编译，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>出现编译错误自然也就不奇怪了。<br>&nbsp;&nbsp;&nbsp; </span><span>当然，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>这里如果从</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">X:\ </span><span>下打开工程的话，</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">VC</span><span>就会认为都是从</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">X:\Type1.h</span><span>下包含这个文件，</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#pragma once</span><span>起到了作用，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>也就不会出现类型重定义了</span><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><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">D:TestType1.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">X:Type1.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br><img id=Codehighlighter1_79_94_Open_Image onclick="this.style.display='none'; Codehighlighter1_79_94_Open_Text.style.display='none'; Codehighlighter1_79_94_Closed_Image.style.display='inline'; Codehighlighter1_79_94_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_79_94_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_94_Closed_Text.style.display='none'; Codehighlighter1_79_94_Open_Image.style.display='inline'; Codehighlighter1_79_94_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_79_94_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_79_94_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>&nbsp;</p>
#pragma once
<p class=MsoPlainText><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span></p>
<h2><span style="FONT-FAMILY: 黑体"><font size=2>总结</font></span></h2>
<p class=MsoPlainText style="TEXT-INDENT: 21pt"><span>我在</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">VC7, VC8,</span><span>和</span><a href="http://www.bloodshed.net/"><span lang=EN-US style="FONT-FAMILY: 'courier new'"><font color=#000080><u>Dev C++</u></font></span></a><span>中都测试了第三种情况，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>发现只有</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Dev C++</span><span>是可以通过编译的。这可能是微软</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">VC</span><span>的</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#pragma once</span><span>还不够智能吧，轻易的被</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">Windows</span><span>的虚拟盘给蒙蔽了双眼，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>看不到其本质（只是猜测，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>或许</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">VC</span><span>这么处理是有其他用意的）。</span><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span></p>
<p class=MsoPlainText style="TEXT-INDENT: 21pt"><span>因为在稍大一点的工程开发中，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>我们一般都会用虚拟盘来方便工作，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>一是访问快捷，简化了路径，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>二是因为多人协同开发，我们一般希望大家源代码路径相同，但我们不应强制要求大家都把源代码放死在某一目录下，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>这时把你放源代码的路径映射为一个虚拟盘（比如说统一为</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">X:</span><span>）就能把大家的代码路径统一起来了。但是另一方面，有了虚拟盘，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>就为出现类型重定义提供了条件，</span><span style="FONT-FAMILY: 'Courier New'"> </span><span>以下是我得出的两个解决方法：<br></span><span><br>1 </span><span>抛弃</span><span lang=EN-US style="FONT-FAMILY: 'courier new'">#pragma once</span><span>使用古老但集稳定性与移植性于一身的</span><span lang=EN-US style="FONT-FAMILY: 'courier new'"><o:p></o:p></span></p>
<p class=MsoPlainText style="MARGIN-LEFT: 39pt"><span></span>来保证头文件只被编译一次。这样不管是包含两个相同的文件，还是包含两个不同的文件，或是包两个文件相同但路径不同的文件， 只要_XXX_H被定义过， 就不会再编译那个编译(但这里我们要保证_XXX_H的唯一性， 如果两个不同的头文件里用了同一_XXX_H,是会出问题的)</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#ifndef&nbsp;_XXX_H<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;_XXX_H<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><img src="http://www.cppblog.com/Images/dot.gif"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#endif</span></div>
<br>2 在包含头文件时，不要使用绝对路径， 哪怕那是虚拟盘的绝对路径。</span>
<img src ="http://www.cppblog.com/luyu16404/aggbug/44096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-03-10 16:32 <a href="http://www.cppblog.com/luyu16404/archive/2008/03/10/44096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程</title><link>http://www.cppblog.com/luyu16404/archive/2008/03/10/44049.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Sun, 09 Mar 2008 16:11:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/03/10/44049.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/44049.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/03/10/44049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/44049.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/44049.html</trackback:ping><description><![CDATA[<p>yutou<br><br>2008年3月10日<br></p>
如图:&nbsp;&nbsp;&nbsp; 需求分析 =&gt;&nbsp;可行性分析 =&gt; 实施具体方案 =&gt; 维护与支持<br>
<img src ="http://www.cppblog.com/luyu16404/aggbug/44049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-03-10 00:11 <a href="http://www.cppblog.com/luyu16404/archive/2008/03/10/44049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>项目可行性分析方法 --摘自IBM</title><link>http://www.cppblog.com/luyu16404/archive/2008/03/09/44048.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Sun, 09 Mar 2008 15:45:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/03/09/44048.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/44048.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/03/09/44048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/44048.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/44048.html</trackback:ping><description><![CDATA[<p align=left><strong><span>用可行性研究论证您的项目</span></strong><span> </span></p>
<p align=left><span>　</span></p>
<p align=left><span>Scott W. Ambler<br></span><span>总裁，</span><span>Ronin International<br>2000 </span><span>年</span><span>8 </span><span>月</span><span>24 </span><span>日</span><span><br></span><span>本文来自 </span>http://www.ibm.com/developerworks/tw/library/tip-justify/<br><br><br><br></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在任何项目的开始阶段，项目组都要为项目的总体工作做一些准备工作。在</span><span> Rational Unified Process</span><span>（</span><span>RUP</span><span>）和面向对象的软件过程（</span><span>OOSP</span><span>）中，这个阶段称为启动阶段。本周，我们考虑如何确定一个项目是否值得启动。本文由《</span><span>Process Patterns</span><span>》的第五章改编而来。</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启动项目的一个重要环节就是对项目进行论证；也就是说，确定是否应该立项。遗憾的是，论证经常是完成得最差的一项任务。</span><span>85% </span><span>以上的大型项目以失败告终（请参阅</span><span><a href="http://www.sawin.com.cn/doc/SD/UML/uml-feasibility.htm#resources#resources"><span>参考资源</span></a></span><span>中的《</span><span>Patterns of Software Systems Failure and Success</span><span>》一书），这一事实表明大多数项目在论证阶段就应该中止，而不是在为其作了大量投资（并造成损失）之后。论证阶段的主要目标是，确定项目的最佳实施方案，如果存在这样的方案，还要论证它为什么是最佳的。</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图</span><span>1</span><span>描绘了针对论证阶段的过程模型的解决方案。论证项目时需要完成几项工作，论证项目的主要结果便是可行性研究。为了进行可行性研究，您将重复下列步骤：</span><span> </span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#183;<span> </span></span><span><a href="http://www.sawin.com.cn/doc/SD/UML/uml-feasibility.htm#1#1"><span>确定可选的实施方案</span></a> </span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;<span> </span></span><span><a href="http://www.sawin.com.cn/doc/SD/UML/uml-feasibility.htm#2#2"><span>评估每项可选方案的经济可行性</span></a> </span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;<span> </span></span><span><a href="http://www.sawin.com.cn/doc/SD/UML/uml-feasibility.htm#3#3"><span>评估每项可选方案的技术可行性</span></a> </span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;<span> </span></span><span><a href="http://www.sawin.com.cn/doc/SD/UML/uml-feasibility.htm#4#4"><span>评估每项可选方案的运行可行性</span></a> </span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;<span> </span></span><span><a href="http://www.sawin.com.cn/doc/SD/UML/uml-feasibility.htm#5#5"><span>选择一项可选方案</span></a> </span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#183;<span> </span></span><span><a href="http://www.sawin.com.cn/doc/SD/UML/uml-feasibility.htm#6#6"><span>确定潜在的风险</span></a> </span></p>
<p align=left><span>　</span></p>
<p align=left><a name=Figure1><strong><span>图</span></strong></a><strong><span> 1. </span></strong><strong><span>论证阶段的过程模型</span></strong></p>
<p align=left><span><br></span><span><img height=155 src="http://www.vchome.net/swengineer/umlrosecmm/pics1/image001.gif" width=580 border=0></span></p>
<p align=left><a name=1><span>　</span></a></p>
<p align=left><span>　</span></p>
<p align=left><strong><span>确定可选的实施方案</span></strong></p>
<p align=left><span><br></span><span>可行性研究的第一阶段是确定项目潜在的可选实施方案。与流行的观点正好相反，实现应用时总有多种选择，包括什么都不做、使用多种技术实现它、购买一种类似的系统或者将开发工作外包。重要的是，为您的项目确定几个可行的可选实施方案，以便您进行评估和比较，从而最终为自己的公司选择最佳的实施方案。</span></p>
<p align=left><a name=2><strong><span>评估经济可行性</span></strong></a><span><br></span><span>在评估一项可选实施方案的经济可行性时，要回答的基本问题是，</span><span>&#8220;</span><span>该应用何时能收回成本？</span><span>&#8221;</span><span>您可以通过进行成本</span><span>/</span><span>收益分析来回答这个问题。顾名思义，成本</span><span>/</span><span>收益分析就是将应用的全部实际成本与其全部实际财务收益相比较。在《</span><span>The Squandered Computer</span><span>》一书中（请参阅</span><span><a href="http://www.sawin.com.cn/doc/SD/UML/uml-feasibility.htm#resources#resources"><span>参考资源</span></a></span><span>），</span><span>Strassmann </span><span>指出，应该根据可选方案对净现金流量</span><span> — </span><span>即收益超过成本的总金额</span><span> — </span><span>的贡献来评价各个方案，因为所有投资的首要目标就是提高公司的整体业绩。</span></p>
<p align=left><a name=3><strong><span>评估技术可行性</span></strong></a><span><br></span><span>除了经济可行性之外，您还必须确定每项可选实施方案的技术可行性。此时需要回答的基本问题是，</span><span>&#8220;</span><span>是否能够创建该应用？</span><span>&#8221;</span><span>首先，您必须调研该项目要使用的各项技术。技术方面的问题在于，每项技术在行销演示中都能完美地完成工作，而一旦将它购买回来，往往又是另一种情况。因此，您应该鉴定每一种可供选择的技术。请注意，为了进行合理的评估，您可能需要实现一个微型项目，并且创建一个概念验证</span><span> (proof-of-concept) </span><span>原型来检验这些技术是否能协同工作。这是</span><span> RUP </span><span>的描述阶段的基本任务，它可能持续几周或者几个月，但是只有在检验出您选择的技术能否协同工作时才会体现出它的价值。</span></p>
<p align=left><a name=4><strong><span>评估运行可行性</span></strong></a><span><br></span><span>一个应用不应该在经济和技术上行得通，它还必须在运行上行得通。此时要回答的问题的，</span><span>&#8220;</span><span>应用一旦成为产品，是否能够对该应用提供维护和支持？</span><span>&#8221;</span><span>创建一个应用与运行一个应用完全是两码事；因此，您必须确定是否能够有效地运行和支持它。</span></p>
<p align=left><a name=5><strong><span>选择一项可选方案</span></strong></a><span><br></span><span>一旦完成对每项可选实施方案的经济、技术和运行可行性评估，就应该从中选择一种实施方案。请记住</span><span> — </span><span>可行性研究的目标是，比较和对比各项可选实施方案，<em>并</em>提出一个最佳的实施方案。执行该项任务的第一步是，排除任何在经济上、技术上或者运行上不可行的方案。这意味着您可能没有剩下任何可选方案。但是什么都不做可能也是不可行的，它意味着您必须从头再来，鉴定更多的可选方案。如果只剩下一个可选方案，则很容易做出决策；如果最后剩下多个可选方案，则必须选择一个最适合您的公司的实施方案。您还可以只确定可行的可选方案，而将决策权留给上级主管部门。</span></p>
<p align=left><a name=6><strong><span>确定潜在的风险</span></strong></a><span><br></span><span>项目论证工作包括定义潜在的风险，特别是那些与项目的技术和运行可行性相关的潜在风险。关键的一点是应该将它们加入您的风险评估文档，以便在项目实施过程中能够妥善处理它们，这也是今后的技巧要讨论的主题。</span></p>
<p align=left><a name=resources><strong><span>参考资源</span></strong></a><span><br></span><span>关于过程模型和</span><span> Rational Unified Process </span><span>的详细信息，请参阅：</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://www.ambysoft.com/processPatterns.html"><span>《</span>Process Patterns — Building Large-Scale Systems Using Object Technology<span>》</span></a></span><span>，</span><span>Scott W. Ambler </span><span>著。</span><span>Cambridge University </span><span>出版社，纽约，</span><span>1998 </span><span>年。</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://www.ambysoft.com/moreProcessPatterns.html"><span>《</span>More Process Patterns — Delivering Large-Scale Systems Using Object Technology<span>》</span></a></span><span>，</span><span>Scott W. Ambler </span><span>著。</span><span>Cambridge University </span><span>出版社，纽约，</span><span>1999 </span><span>年。</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://www.ambysoft.com/theObjectPrimer.html"><span>《</span>The Object Primer 2nd Edition<span>》</span></a></span><span>，</span><span>Scott W. Ambler </span><span>著。</span><span>Cambridge University </span><span>出版社，纽约，</span><span>2000 </span><span>年。</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://www.ambysoft.com/inceptionPhase.html"><span>《</span>The Unified Process Inception Phase<span>》</span></a></span><span>，</span><span>Scott W. Ambler </span><span>和</span><span> Larry L. Constantine </span><span>著。</span><span>R&amp;D Books</span><span>，</span><span>CA</span><span>，</span><span>Gilroy</span><span>，</span><span>2000 </span><span>年。</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://www.ambysoft.com/elaborationPhase.html"><span>《</span>The Unified Process Elaboration Phase<span>》</span></a></span><span>，</span><span>Scott W. Ambler </span><span>和</span><span> Larry L. Constantine </span><span>著。</span><span>R&amp;D Books</span><span>，</span><span>CA</span><span>，</span><span>Gilroy</span><span>，</span><span>2000 </span><span>年。</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://search.borders.com/fcgi-bin/db2www/search/search.d2w/Details?&amp;mediaType=Book&amp;prodID=4399707"><span>《</span>Patterns of Software Systems Failure and Success<span>》</span></a></span><span>，</span><span>Capers Jones </span><span>著。</span><span>International Thomson Computer </span><span>出版社，</span><span>MA</span><span>，</span><span>Boston</span><span>，</span><span>1996 </span><span>年。</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://search.borders.com/fcgi-bin/db2www/search/search.d2w/Details?&amp;mediaType=Book&amp;prodID=51704028"><span>《</span>The Rational Unified Process: An Introduction<span>》，第二版，</span></a>Philippe Kruchten </span><span>著。</span><span>Reading, MA: Addison-Wesley Longman, Inc.</span><span>，</span><span>MA</span><span>，</span><span>Reading</span><span>，</span><span>2000 </span><span>年。</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://search.borders.com/fcgi-bin/db2www/search/search.d2w/Details?&amp;mediaType=Book&amp;prodID=4210170"><span>《</span>The Squandered Computer: Evaluating the Business Alignment of Information Technologies<span>》</span></a></span><span>，</span><span>Paul Strassmann </span><span>著。</span><span>New Canaan</span><span>，</span><span>CT</span><span>：</span><span>Information Economics </span><span>出版社，</span><span>CT</span><span>，</span><span>New Canaan</span><span>，</span><span>1997 </span><span>年。</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://www.ambysoft.com/processPatternsPage.html"><span>《</span>The Process Patterns Resource Page<span>》</span></a></span><span>，</span><span>Scott Ambler </span><span>著</span><span> </span></p>
<p align=left><span>&#183;<span> </span></span><span><a href="http://www.ambysoft.com/onlineWritings.html">Scott Ambler <span>的在线文章</span></a></span></p>
<p align=left><br>/*&nbsp; &amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&nbsp; */<br><a name=Figure1><strong><span>图</span></strong></a><strong><span> 1. </span></strong><strong><span>论证阶段的过程模型(译)<br><br>方案文档,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可行性研究,<br>版本,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;评估运行可行性&nbsp;&nbsp; 风险评估&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;建议,<br>方案评估,&nbsp;&nbsp;&nbsp; =&gt; 论证执行方案 =&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp; 选择一种方案 =&gt;&nbsp;&nbsp; 项目资金,<br>进度表,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;评估经济可行性&nbsp;&nbsp; 评估技术可行性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;确定潜在风险<br>风险估计<br></span></strong></p>
<img src ="http://www.cppblog.com/luyu16404/aggbug/44048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-03-09 23:45 <a href="http://www.cppblog.com/luyu16404/archive/2008/03/09/44048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>提醒自己</title><link>http://www.cppblog.com/luyu16404/archive/2008/03/04/43673.html</link><dc:creator>yutou</dc:creator><author>yutou</author><pubDate>Tue, 04 Mar 2008 05:30:00 GMT</pubDate><guid>http://www.cppblog.com/luyu16404/archive/2008/03/04/43673.html</guid><wfw:comment>http://www.cppblog.com/luyu16404/comments/43673.html</wfw:comment><comments>http://www.cppblog.com/luyu16404/archive/2008/03/04/43673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luyu16404/comments/commentRss/43673.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luyu16404/services/trackbacks/43673.html</trackback:ping><description><![CDATA[&#8220;我近三十年来一直在学习马克思主义哲学，并总是试图用马克思主义哲学指导我的工作。马克思主义是智慧的源泉。&#8221;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --钱学森在给一位朋友的信中这样说道<br><br>马克思主义哲学对一个人的思想有着革命性的意义.<br><br>blog之,提醒自己不要忽视哲学,并且鞭策自己要坚持学习! 
<img src ="http://www.cppblog.com/luyu16404/aggbug/43673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luyu16404/" target="_blank">yutou</a> 2008-03-04 13:30 <a href="http://www.cppblog.com/luyu16404/archive/2008/03/04/43673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>