﻿<?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++博客-牵着老婆满街逛-随笔分类-学习笔记</title><link>http://www.cppblog.com/tx7do/category/1448.html</link><description>严以律己,宽以待人. 三思而后行.&lt;/br&gt;
GMail/GTalk: yanglinbo#google.com;&lt;/br&gt;
MSN/Email: tx7do#yahoo.com.cn;&lt;/br&gt;
QQ: 3 0 3 3 9 6 9 2 0 .</description><language>zh-cn</language><lastBuildDate>Tue, 02 Sep 2014 19:27:01 GMT</lastBuildDate><pubDate>Tue, 02 Sep 2014 19:27:01 GMT</pubDate><ttl>60</ttl><item><title>CxImage使用掩码色设置透明色的图</title><link>http://www.cppblog.com/tx7do/archive/2012/11/01/194161.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 01 Nov 2012 07:05:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2012/11/01/194161.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/194161.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2012/11/01/194161.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/194161.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/194161.html</trackback:ping><description><![CDATA[CxImage设置透明色的方法:<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;SetImageTransColor(&nbsp;CxImage</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pImg,&nbsp;BYTE&nbsp;R,&nbsp;BYTE&nbsp;G,&nbsp;BYTE&nbsp;B&nbsp;)<br /><img id="Codehighlighter1_65_250_Open_Image" onclick="this.style.display='none'; Codehighlighter1_65_250_Open_Text.style.display='none'; Codehighlighter1_65_250_Closed_Image.style.display='inline'; Codehighlighter1_65_250_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_65_250_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_65_250_Closed_Text.style.display='none'; Codehighlighter1_65_250_Open_Image.style.display='inline'; Codehighlighter1_65_250_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_65_250_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_65_250_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(pImg&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(pImg</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetTransIndex()&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">24</span><span style="color: #000000">)<br /><img id="Codehighlighter1_129_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_129_157_Open_Text.style.display='none'; Codehighlighter1_129_157_Closed_Image.style.display='inline'; Codehighlighter1_129_157_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_129_157_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_129_157_Closed_Text.style.display='none'; Codehighlighter1_129_157_Open_Image.style.display='inline'; Codehighlighter1_129_157_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</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_129_157_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_129_157_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pImg</span><span style="color: #000000">-&gt;</span><span style="color: #000000">IncreaseBpp(</span><span style="color: #000000">24</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pImg</span><span style="color: #000000">-&gt;</span><span style="color: #000000">SetTransIndex(</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img id="Codehighlighter1_204_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_204_215_Open_Text.style.display='none'; Codehighlighter1_204_215_Closed_Image.style.display='inline'; Codehighlighter1_204_215_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_204_215_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_204_215_Closed_Text.style.display='none'; Codehighlighter1_204_215_Open_Image.style.display='inline'; Codehighlighter1_204_215_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;RGBQUAD&nbsp;rgbTrans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</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_204_215_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_204_215_Open_Text"><span style="color: #000000">{B,&nbsp;G,&nbsp;R,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">}</span></span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pImg</span><span style="color: #000000">-&gt;</span><span style="color: #000000">SetTransColor(rgbTrans);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span></div>经过这样设置透明色的图,如果使用CxImage::Stretch进行缩放绘制,绘制透明色并不会透明,而会原汁原味的将透明色如实的绘制上去,经过测试,使用CxImage::Draw2这个方法缩放绘制是没有问题的.<img src ="http://www.cppblog.com/tx7do/aggbug/194161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2012-11-01 15:05 <a href="http://www.cppblog.com/tx7do/archive/2012/11/01/194161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC获取窗口可视状态的两种API方法</title><link>http://www.cppblog.com/tx7do/archive/2011/12/18/162347.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sun, 18 Dec 2011 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2011/12/18/162347.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/162347.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2011/12/18/162347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/162347.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/162347.html</trackback:ping><description><![CDATA[第一种方法： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">::IsWindowVisible (hWnd);</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" />::<span style="color: #000000">GetWindowLong (hWnd, GWL_STYLE) </span><span style="color: #000000">&amp;</span><span style="color: #000000"> WS_VISIBLE;</span></div><img src ="http://www.cppblog.com/tx7do/aggbug/162347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2011-12-18 17:08 <a href="http://www.cppblog.com/tx7do/archive/2011/12/18/162347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IsWindowVisible无法获取到正确的状态？</title><link>http://www.cppblog.com/tx7do/archive/2011/12/18/162346.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sun, 18 Dec 2011 09:05:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2011/12/18/162346.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/162346.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2011/12/18/162346.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/162346.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/162346.html</trackback:ping><description><![CDATA[IsWindowVisible居然会无法获取到正确的窗口状态，这件事情真真的发生了。<br />ShowWindow(SW_SHOW)之后调用IsWindowVisible竟然获取不到正确的可见状态，但是如果窗口发生了大小变化之后，获取的状态就是正确的了。<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">GetWindowLong(hWnd,&nbsp;GWL_STYLE)&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;WS_VISIBLE</span></div>使用此种方法之后就正确了。<br />暂时还不知道究竟是为什么，先记下来，以后有时间再深究了。如果看到此文的各位有谁知道缘由，共享一下吧，不胜感激。:)<br /><img src ="http://www.cppblog.com/tx7do/aggbug/162346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2011-12-18 17:05 <a href="http://www.cppblog.com/tx7do/archive/2011/12/18/162346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Dialog程序,启动时不显示主窗口,只显示子窗口的实现</title><link>http://www.cppblog.com/tx7do/archive/2006/12/19/16634.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Tue, 19 Dec 2006 14:06:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/12/19/16634.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/16634.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/12/19/16634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/16634.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/16634.html</trackback:ping><description><![CDATA[在项目中有如下的一个需求:<br />软件在网络启动状态下显示主窗口,而在单机状态下只显示其子对话框(我的是无模式的).<br />在网上找了一天,各种办法都似乎不太好,<br />不过晚上终于找到了一个不错的解决办法.<br />使得我很好的解决了这个问题.<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (theApp.m_bUnConnect)<br /><img id="Codehighlighter1_33_263_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_263_Open_Text.style.display='none'; Codehighlighter1_33_263_Closed_Image.style.display='inline'; Codehighlighter1_33_263_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_33_263_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_33_263_Closed_Text.style.display='none'; Codehighlighter1_33_263_Open_Image.style.display='inline'; Codehighlighter1_33_263_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_33_263_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_33_263_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        CRecordDlg</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> dlg;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        CWnd</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> m_pCWnd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        dlg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> CRecordDlg(m_pCWnd);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Create(IDD_DLG_RECORD,m_pCWnd);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">ShowWindow(SW_SHOW); <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetWindowPos(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">wndTop,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,NULL);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> if ()</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_287_325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_287_325_Open_Text.style.display='none'; Codehighlighter1_287_325_Closed_Image.style.display='inline'; Codehighlighter1_287_325_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_287_325_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_287_325_Closed_Text.style.display='none'; Codehighlighter1_287_325_Open_Image.style.display='inline'; Codehighlighter1_287_325_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_287_325_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_287_325_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />       ShowWindow(SW_MAXIMIZE);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></div>以上为我实现代码.<br />实现主窗口隐藏的是SetWindowPos(),从代码很容易理解出来,就是把主窗口的坐标设置为(0,0,0,0),也就是说把主窗口设置为一个点,并且点处于原点处.<br />其实是一种伪隐藏,可是它还是实现了隐藏,并且实现的效果相当不错,没有闪烁,也没有副作用(至少现在没有发现有).<br />不过要注意的是,无模式对话框关闭时候除了要DestroyWindow(),还需要PostQuitMessage(0);将主窗口给关闭掉,否则程序进程实际还在.<br /><br />嘿嘿,实在是很不错的解决方案,简单有效.<img src ="http://www.cppblog.com/tx7do/aggbug/16634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-12-19 22:06 <a href="http://www.cppblog.com/tx7do/archive/2006/12/19/16634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>绝对好用 Linux操作系统的8个经典技巧</title><link>http://www.cppblog.com/tx7do/archive/2006/10/07/13434.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 07 Oct 2006 13:19:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/10/07/13434.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/13434.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/10/07/13434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/13434.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/13434.html</trackback:ping><description><![CDATA[
		<p class="main">
				<strong>1、处理特殊的文件名</strong>
		</p>
		<p class="main">　　假设Linux系统中有一个文件名叫“-ee”，如果我们想对它进行操作，例如要删除它，按照一般的删除方法在命令行中输入rm -ee命令，界面会提示我们是“无效选项”(invalid option)，原来由于文件名的第一个字符为“-”，Linux把文件名当作选项了，我们可以使用“--”符号来解决这个问题，输入“rm -- -ee”命令便可顺利删除名为“-ee”的文件。如果是其他特殊字符的话可以在特殊字符前加一个“”符号，或者用双引号把整个文件名括起来。 </p>
		<p class="main">
				<strong>2、直接进行Linux的安装工作</strong>
		</p>
		<p class="main">　　在安装Linux操作系统时，可以利用该系统光盘中的一个名为“loadlin.exe”的软件，将Linux核心直接调入内存，由Linux核心代替当前操作系统来接管计算机，并进入Linux的安装界面。在安装Linux时，我们只要在运行对话框中输入“loadlin E:imagesvmlinuz root=/dev/ram initrd=E:imagesinitrd.img”这个命令就可以直接安装Linux了；其中“E:imagesvmlinuz”为Linux的核心名。 </p>
		<p class="main">
				<strong>3、消除Xwindows下的死机现象</strong>
		</p>
		<p class="main">　　我们可以用两个常用的方法来消除这种现象：第一，用键盘上的复合键“Ctrl+Alt+Backspace”来关闭当前正在运行的任务；第二，首先按住键盘上的“Ctrl+Alt+F2”复合键，让系统切换到另一个操作台，然后登录到系统，再执行“#ps -ax/grep startx”命令，这将会列出你的Xserver的进程标识，接着在命令行中输入如下命令就能消除Xwindows下的死机现象：#kill -9 PID_Number，最后通过“Alt+F1”复合键返回到原来的平台。 </p>
		<p class="main">
				<strong>4、快速关闭Linux系统 </strong>
		</p>
		<p class="main">　　最新版本的Linux/UNIX系统借鉴了大型机的技术，采用了抗掉电的日志式文件系统，可以自动跟踪保存用户数据，自动同步刷新文件系统，用户完全可以随手关闭电源，从而达到快速关闭系统的目的。 </p>
		<p class="main">
				<strong>5、巧妙使用“rm”命令</strong>
		</p>
		<p class="main">　　我们可以使用带“-r”参数的“rm”命令来删除一个非空目录，例如我们在命令行中输入“rm -r bbb”这样的命令，表示系统将把bbb目录中包含的所有文件和子目录全部删除掉。 </p>
		<p class="main">
				<strong>6、巧妙使用“Tab”键 </strong>
		</p>
		<p class="main">　　大家知道在Linux字符界面中输入命令时，有时需要输入很多字符，如果经常这样逐个地输入字符，比较麻烦。假设键入的字符足以确定该目录下一个惟一的文件时，我们只需按键盘上的“Tab”键就可以自动补齐该文件名的剩下部分，例如要把目录/ccc下的文件“ddddddd-1.2.3.tar.gz”解包时，当我们在命令行中键入到“tar xvfz /ccc/d”时，如果该文件是该目录下惟一以“d”打头的文件的话就可以直接按下“Tab”键，这时命令会被自动补齐为：tar xvfz /ccc/ddddddd-1.2.3.tar.gz ，从而提高了输入效率。 </p>
		<p class="main">
				<strong>7、多用鼠标拷贝与粘贴来提高操作速度</strong>
		</p>
		<p class="main">　　Linux系统安装后，每次启动到字符界面时都会自动运行一个叫“gpm”的程序，该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方突出显示，这时突出显示的区域已经被拷贝，再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。如果我们在Xwindow下运行Linux 系统，拷贝与粘贴的操作与在Windows 9x系统下一样。 </p>
		<p class="main">
				<strong>8、快速启动Linux系统 </strong>
		</p>
		<p class="main">　　在DOS下，有一种简单快速启动Linux的方法，那就是load Linux。loadlin.exe是DOS下的可执行程序，它可以在纯DOS环境下迅速启动Linux，而且无需重启计算机，通常我们可以在光盘的 “/kernels”目录下找到这个程序。如果不知这个程序被放置于安装盘的何处，可以使用“find -name loadlin*”命令来寻找。找到之后将其复制到DOS分区中，同时还需要复制一份你所使用的Linux内核文件。可以通过Windows直接从光盘复制，也可在Linux环境下使用“mcopy”命令将文件复制到DOS分区；接着再编写一个名为“Linux.bat”的批处理文件，文件内容如下：c: loadlin c:vmlinuz root=/dev/hda1 ro(我们假设loadlin.exe和vmlinuz这两个内核文件都在c盘根目录下，“root”为Linux的根设备，而且Linux处于硬盘第一分区，所以设备名为“/dev/hda1”，“ro”意为readonly)。以后在DOS下要启动Linux时，运行“Linux.bat”就可以了。</p>
<img src ="http://www.cppblog.com/tx7do/aggbug/13434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-10-07 21:19 <a href="http://www.cppblog.com/tx7do/archive/2006/10/07/13434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Putty相关的知识</title><link>http://www.cppblog.com/tx7do/archive/2006/09/28/13066.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 27 Sep 2006 16:34:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/28/13066.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/13066.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/28/13066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/13066.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/13066.html</trackback:ping><description><![CDATA[Putty的Session保存的地方.<br />HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions<br /><br /><div>一、Putty简介<br />    Putty是一个免费小巧的Win32平台下的telnet,rlogin和ssh客户端，目前最新版本为0.58。它的主程序只有364k，但是功能丝毫不逊色于商业的telnet类工具。官方主页：<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"><strong><font color="#000099">http://www.chiark.greenend.org.uk/~sgtatham/putty/</font></strong></a> 。<br />Putty是unix好用的telnet类工具，理由：<br />1．完全免费的telnet和ssh客户端工具<br />2．在9x/NT/2000下运行的非常好<br />3．全面支持ssh1和ssh2<br />4．绿色软件，无需安装，下载后在桌面建个快捷方式就行<br />5．体积很小仅412K(版本0.58)<br />6．操作简单，所有的操作都在一个控制面板中实现。<br />二、Putty快速起步<br />1．        开始一个任务 双击putty.exe；<br />2．        在Host Name(or IP address)输入欲访问的主机名或IP；<br />如：192.168.1.4<br />3．        在protocol选择使用的协议,一般是telnet或ssh,取决于服务器的提供服务。<br />4．        可以把所选的任务配置存起来，在Saved Session输入任务的名字。<br />5．        双击Open, 就出现画面，至此，就可以使用putty<br />           <br />三．Putty使用技巧<br />当然，上面介绍的知识最基本的使用方法，常见使用方法和技巧还有：<br />1．        中文输入支持<br />putty也支持中文输入，要设置一下：<br />Window-&gt;;Appearence-&gt;;Font：change-&gt;;宋体，字符集选择 CHINESE_GB2312。<br />2．        分颜色显示支持<br />putty也支持分颜色显示目录，可执行文件，普通文件等，要设置一下：<br />       connection-&gt;;terminal type string-&gt;;将默认的xterm改为xterm-color<br /><br />3．        为任务建立一个快捷方式<br />putty可以为经常访问的站点，建立一个windows快捷方式。建立方法：<br />先选中putty.exe,右击鼠标，发送得到桌面。然后右击快捷方式，选”属性”,在快捷方式--目标—“c:\putty.exe”改为”c:\putty.exe @mysession”<br />4．        复制和粘贴<br />在putty窗口中，通过鼠标左键拖动选取复制对象，如一个命令，同时已经加入到windows的粘贴板了，通过单击鼠标右键来粘贴对象。在windwos应用可以直接粘贴使用。同时windows的粘贴板的对象可以在putty窗口中通过单击鼠标右键来粘贴对象。<br />  四   ssh,telnet,rlogin,raw四种方式区别和联系<br />1、Ssh,telnet,rlogin都可以用来远程连接unix.通过提供类似windows的“dos窗口”，来操作linux.<br />2、SSH是英文Secure Shell的简写形式。通过使用SSH，你可以把所有传输的数据进行加密，这样"中间人"这种攻击方式就不可能实现了，而且也能够防止DNS欺骗和IP欺骗。使用SSH，还有一个额外的好处就是传输的数据是经过压缩的，所以可以加快传输的速度。SSH有很多功能，它既可以代替Telnet，又可以为FTP、Pop、甚至为PPP提供一个安全的"通道"。Ssh有两个版本：ssh1和ssh2.<br />3、        SSH默认使用端口号22，telnet默认使用端口号23。telnet默认使用端口号513。<br />4、        Ssh和rlogin可以允许登录时不必输入密码。<br />5、        Ssh可以在登录时执行脚本。<br />6、        很多的tcp/ip协议包含着明文传输的命令，如smtp,nntp,http,因此使用raw方式可以看到这些明文传输的命令，检查是否正确等。<br /></div><img src ="http://www.cppblog.com/tx7do/aggbug/13066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-28 00:34 <a href="http://www.cppblog.com/tx7do/archive/2006/09/28/13066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vim7中的Tab功能</title><link>http://www.cppblog.com/tx7do/archive/2006/09/22/12809.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 21 Sep 2006 20:20:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/22/12809.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12809.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/22/12809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12809.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12809.html</trackback:ping><description><![CDATA[
		<p>Vim7中新增加了Tab功能，即命令前缀 tab。在新建窗口的命令前增加 tab 即可在新的Tab中打开窗口。</p>
		<pre>:tab new              # 在新Tab中建立新文件
:tab new sample.txt   # 在新Tab中打开sample.txt</pre>
		<p>快捷键：</p>
		<pre>gt                    # 切换Tab
&lt;数字&gt;gt              # 切换到指定的Tab</pre>
		<p>详细内容可以通过以下命令查看帮助。</p>
		<pre>:h :tab</pre>
<img src ="http://www.cppblog.com/tx7do/aggbug/12809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-22 04:20 <a href="http://www.cppblog.com/tx7do/archive/2006/09/22/12809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>犯了一个最愚蠢的错误=.=</title><link>http://www.cppblog.com/tx7do/archive/2006/09/07/12119.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 07 Sep 2006 04:38:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/07/12119.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12119.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/07/12119.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12119.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12119.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">for</span>
				<span style="COLOR: #000000">(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i ,i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">n,i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_20_45_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_45_Open_Text.style.display='none'; Codehighlighter1_20_45_Closed_Image.style.display='inline'; Codehighlighter1_20_45_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_20_45_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_20_45_Closed_Text.style.display='none'; Codehighlighter1_20_45_Open_Image.style.display='inline'; Codehighlighter1_20_45_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_20_45_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_20_45_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> j,j</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">m,i</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_41_43_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_43_Open_Text.style.display='none'; Codehighlighter1_41_43_Closed_Image.style.display='inline'; Codehighlighter1_41_43_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_41_43_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_43_Closed_Text.style.display='none'; Codehighlighter1_41_43_Open_Image.style.display='inline'; Codehighlighter1_41_43_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>
						<span id="Codehighlighter1_41_43_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_41_43_Open_Text">
								<span style="COLOR: #000000">{;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<img height="20" src="http://www.cppblog.com/Emoticons/hitwall.gif" width="25" border="0" />居然把j次循环的j++写成了i++,问题找了我半天,晕死....<br />以后都不用j了,i和j实在太形似了......<img height="19" src="http://www.cppblog.com/Emoticons/cry_smile.gif" width="19" border="0" /><img src ="http://www.cppblog.com/tx7do/aggbug/12119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-07 12:38 <a href="http://www.cppblog.com/tx7do/archive/2006/09/07/12119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关MFC的C1189错误的解决</title><link>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 06 Sep 2006 17:07:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12109.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12109.html</trackback:ping><description><![CDATA[在MFC的基于对话框的程序里面可以看到这个:<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">#ifndef __AFXWIN_H__<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">#error</span><span style="COLOR: #000000"> 在包含用于 PCH 的此文件之前包含“stdafx.h”</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#endif</span></div>引发了错误,估计是我删除了编译的文件,但是没有删除干净,结果再次编译的时候,出错了.<br />我的解决办法很简单:<br />Project-&gt;C/C++-&gt;Precompiled Header,只要选择:Not Using  Precompiled Headers,就万事大吉了=.=<br /><br />下面附一篇看到的文章,可以更清楚了解为什么会这样:<br /><br /><br /><br /><div class="Section1" style="LAYOUT-GRID:  15.6pt none"><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头文件的使用：</span></p><p class="MsoNormal"><span lang="EN-US"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关键字：预编译，</span><span lang="EN-US">/Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">/Yx</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文介绍</span><span lang="EN-US">VC6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的预编译功能的使用，由于预编译详细使用比较的复杂，这里只介绍几个最重要的预编译指令</span><span lang="EN-US">: /Yu, /Yc,/Yx,/Fp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。其它的详细资料可以参考</span><span lang="EN-US">:<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 31.5pt; mso-char-indent-count: 3.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">MSDN-&gt;Visual Studio D6.0Document -&gt; Visual C++6.0 Document <o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 105pt; mso-char-indent-count: 10.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">-&gt;VC++ Programer Guider -&gt;Compiler and Linker<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 105pt; mso-char-indent-count: 10.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">-&gt;Details-&gt;Creating Precompiled Header files</span></p><p class="MsoNormal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的概念：</span><span lang="EN-US" style="COLOR: maroon"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所谓的预编译头就是把一个工程中的那一部分代码</span><span lang="EN-US">,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预先编译好放在一个文件里</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常是以</span><span lang="EN-US" style="COLOR: red">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为扩展名的</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个文件就称为预<u><span style="COLOR: red">编译头文件</span></u>这些预先编译好的代码可以是任何的</span><span lang="EN-US">C/C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码</span><span lang="EN-US">--------</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">甚至是</span><span lang="EN-US">inline</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的函数，但是必须是稳定的，在工程开发的过程中不会被经常改变。如果这些代码被修改，则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的。同时你得注意预编译头文件通常很大，通常有</span><span lang="EN-US">6-7M</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">大。注意及时清理那些没有用的预编译头文件。</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也许你会问：现在的编译器都有</span><span lang="EN-US">Time stamp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的功能，编译器在编译整个工程的时候，它只会编译那些经过修改的文件，而不会去编译那些从上次编译过，到现在没有被修改过的文件。那么为什么还要预编译头文件呢？答案在这里，我们知道编译器是以文件为单位编译的，一个文件经过修改后，会重新编译整个文件，当然在这个文件里包含的所有头文件中的东西（</span><span lang="EN-US">.eg Macro, Preprocesser </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）都要重新处理一遍。</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的预编译头文件保存的正是这部分信息。以避免每次都要重新处理这些头文件。</span></p><p class="MsoNormal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的作用</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span></p><p class="MsoNormal"><span style="FONT-SIZE: 15pt; COLOR: red; FONT-FAMILY: 隶书; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">方法一：手动方法</span><span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: red; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 隶书"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根据上文介绍，预编译头文件的作用当然就是提高便宜速度了，有了它你没有必要每次都编译那些不需要经常改变的代码。编译性能当然就提高了。</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的使用：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">     </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要使用预编译头，我们必须指定一个头文件，这个头文件包含我们不会经常改变的代码和其他的头文件，然后我们用这个头文件来生成一个预编译头文件（</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><span style="mso-spacerun: yes"> </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">想必大家都知道</span><span lang="EN-US"> StdAfx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个文件。很多人都认为这是</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的一个“系统级别”的，编译器带的一个头文件。其实不是的，这个文件可以是任何名字的。我们来考察一个典型的由</span><span lang="EN-US">AppWizard</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">生成的</span><span lang="EN-US">MFC Dialog Based</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　程序的预编译头文件。（因为</span><span lang="EN-US">AppWizard</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会为我们指定好如何使用预编译头文件，默认的是</span><span lang="EN-US">StdAfx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这是</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">起的名字）。我们会发现这个头文件里包含了以下的头文件：</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxwin.h&gt;<span style="mso-spacerun: yes">         </span>// MFC core and standard components<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxext.h&gt;<span style="mso-spacerun: yes">         </span>// MFC extensions<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxdisp.h&gt;<span style="mso-spacerun: yes">        </span>// MFC Automation classes<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxdtctl.h&gt;<span style="mso-tab-count: 2">             </span>// MFC support for Internet Explorer 4 Common Controls<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxcmn.h&gt;<span style="mso-tab-count: 1">      </span></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这些正是使用</span><span lang="EN-US">MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的必须包含的头文件，当然我们不太可能在我们的工程中修改这些头文件的，所以说他们是稳定的。</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么我们如何指定它来生成预编译头文件。我们知道一个头文件是不能编译的。所以我们还需要一个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件来生成</span><span lang="EN-US">.pch </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。这个文件默认的就是</span><span lang="EN-US">StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在这个文件里只有一句代码就是：</span><span lang="EN-US">#include “Stdafx.h”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。原因是理所当然的，我们仅仅是要它能够编译而已―――也就是说，要的只是它的</span><span lang="EN-US">.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的扩展名。我们可以用</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译开关来指定</span><span lang="EN-US">StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来生成一个</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，通过</span><span lang="EN-US">/Fp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译开关来指定生成的</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的名字。打开</span><span lang="EN-US">project -&gt;Setting-&gt;C/C++ </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对话框。把</span><span lang="EN-US">Category</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指向</span><span lang="EN-US">Precompiled Header</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在左边的树形视图里选择整个工程　（如图）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" stroked="f" filled="f" o:spt="75" o:preferrelative="t" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn="sum @0 1 0 "></v:f><v:f eqn="sum 0 0 @1 "></v:f><v:f eqn="prod @2 1 2 "></v:f><v:f eqn="prod @3 21600 pixelWidth "></v:f><v:f eqn="prod @3 21600 pixelHeight "></v:f><v:f eqn="sum @0 0 1 "></v:f><v:f eqn="prod @6 1 2 "></v:f><v:f eqn="prod @7 21600 pixelWidth "></v:f><v:f eqn="sum @8 21600 0 "></v:f><v:f eqn="prod @7 21600 pixelHeight "></v:f><v:f eqn="sum @10 21600 0 "></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 245.25pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image001.jpg" o:title="1"></v:imagedata></v:shape><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; TEXT-ALIGN: center; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（图１）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在图中我们的</span><span lang="EN-US">Project Options(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">右下角的那个白的地方</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以看到</span><span lang="EN-US"> /Fp “debug/PCH.pch”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这就是指定生成的</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的名字，默认的通常是　</span><span lang="EN-US">&lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工程名</span><span lang="EN-US">&gt;.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（我的示例工程名就是</span><span lang="EN-US">PCH</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后，在左边的树形视图里选择</span><span lang="EN-US">StdAfx.cpp.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如图：</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图２</span><span lang="EN-US">)<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><v:shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 259.5pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image003.jpg" o:title="2"></v:imagedata></v:shape></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这时原来的</span><span lang="EN-US">Project Option</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变成了</span><span lang="EN-US"> Source File Option</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（原来是工程，现在是一个文件，当然变了）。在这里我们可以看到</span><span lang="EN-US"> /Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开关，</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的作用就是指定这个文件来创建一个</span><span lang="EN-US">Pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后面的文件名是那个包含了稳定代码的头文件，一个工程里只能有一个文件的可以有</span><span lang="EN-US">YC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开关。</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就根据这个选项把</span><span lang="EN-US"> StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译成一个</span><span lang="EN-US">Obj</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件和一个</span><span lang="EN-US">PCH</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">   </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后我们再选择一个其它的文件来看看，如图：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">      </span><v:shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 273pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image005.jpg" o:title="未命名"></v:imagedata></v:shape></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在这里，</span><span lang="EN-US">Precomplier </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择了</span><span lang="EN-US"> Use ………</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一项，头文件是我们指定创建</span><span lang="EN-US">PCH </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的</span><span lang="EN-US">stdafx.h</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。事实上，这里是使用工程里的设置，（如图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span><span lang="EN-US">/Yu”stdafx.h”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">   </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样，我们就设置好了预编译头文件。也就是说，我们可以使用预编译头功能了。以下是注意事项：</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US">1):</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果使用了</span><span lang="EN-US">/Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就是说使用了预编译，我们在每个</span><span lang="EN-US">.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的最开头，我强调一遍是最开头，包含</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你指定产生</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的</span><span lang="EN-US">.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件（默认是</span><span lang="EN-US">stdafx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）不然就会有问题。如果你没有包含这个文件，就告诉你</span><span lang="EN-US">Unexpected file end. </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你不是在最开头包含的，你自己试以下就知道了，绝对有很惊人的效果</span><span lang="EN-US">…..</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）如果你把</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件不小心丢了，编译的时候就会产生很多的不正常的行为。根据以上的分析，你只要让编译器生成一个</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。也就是说把</span><span lang="EN-US"> stdafx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（即指定</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的那个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件）从新编译一遍。当然你可以傻傻的</span><span lang="EN-US"> Rebuild All</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。简单一点就是选择那个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，按一下</span><span lang="EN-US">Ctrl + F7</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。不然可是很浪费时间的哦。</span></p><p class="MsoNormal"><span style="FONT-SIZE: 15pt; COLOR: red; FONT-FAMILY: 隶书; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">方法二。自动使用</span><span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: red; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 隶书"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很简单只要指定</span><span lang="EN-US">/YX</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。或者在上图中选择</span><span lang="EN-US">Automatic………</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。注意的事情是如果你指定了</span><span lang="EN-US">/Yc /Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的话，</span><span lang="EN-US">/Yx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是会被忽略的。前者的优先级别高一些。</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US"><span style="mso-spacerun: yes">        </span></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US"><span style="mso-spacerun: yes">                                                  </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">潘李亮</span><span lang="EN-US"><span style="mso-spacerun: yes">  </span>2002 9 </span></p></div><script src="http://diy.51.net/partner/inject3.php?rid=51000000"></script><div style="DISPLAY: none"><script src="http://diy.51.net/partner/inject3code.php"></script></div><img src ="http://www.cppblog.com/tx7do/aggbug/12109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-07 01:07 <a href="http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些DX的资源</title><link>http://www.cppblog.com/tx7do/archive/2006/08/26/11740.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 26 Aug 2006 15:50:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/26/11740.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11740.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/26/11740.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11740.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11740.html</trackback:ping><description><![CDATA[
		<strong>
				<em>
						<font size="4">Must-visit resources<br /></font>
				</em>
		</strong>- <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndxgen/html/directx9devfaq.asp">The Official DirectX FAQ </a><br />- <a href="http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28000410">DirectX SDK Docs </a>- The online version <br />- <a href="http://discuss.microsoft.com/archives/DIRECTXDEV.html">DIRECTXDEV mailing list </a>- The official Microsoft mailing list for DirectX <br /><br /><br /><font size="4"><b><i>Article/Tutorial/Sample sites<br /></i></b></font>- <a href="http://www.thezbuffer.com/">The Z-Buffer </a>- Managed DirectX resources<br />- <a href="http://www.pieterg.com/">Pieter Germishuys </a>- Managed DirectX tutorials<br />- <a href="http://www.ircomm.net/blogs/mykre/default.aspx">The Inner Realm </a>- Managed DirectX resources<br />- <a href="http://www.drunkenhyena.com/cgi-bin/directx.pl">Drunken Hyena </a>- tutorials, code, utilities, and games <br />- <a href="http://triplebuffer.devmaster.net/tutorials/meshes/">Triple Buffer </a>- Tutorials, code, and a DirectX framework<br />- <a href="http://www.codesampler.com/">Code Sampler </a>- collection of code samples <br />- <a href="http://www.c-unit.com/tutorials/">C-Unit DirectX Tutorials </a>- A series of beginner tutorials for DirectX and Managed DirectX 9.<br />- <a href="http://tomsdxfaq.blogspot.com/">Tom's DX FAQ </a>- Tom Forsyth’s DirectX FAQ<br />- <a href="http://www.vectiva.com/tutorials.htm">Vectiva's Managed DirectX tutorials<br /></a>- <a href="http://www.andypike.com/tutorials/directx8">Andy Pike's DirectX8 Tutorials </a>– covering 2D, 3D, sound, music, and input <br />- <a href="http://www.32bits.co.uk/">32Bits<br /></a>- <a href="http://www.two-kings.de/">Two Kings game development </a><br />- <a href="http://www.gamedev.net/reference/list.asp?categoryid=24">Gamedev.net's DirectX Articles section </a><br />- <a href="http://www.gdod.mjpba.com/">GDOD </a>- Gamedev DirectX Online Discussion - IRC-based DirectX lectures/talks, logs available <br />- <a href="http://developer.nvidia.com/object/General_FAQ.html">NVidia Developer's FAQ </a>- contains a fair amount of DirectX-related information for NVidia's systems <br />- <a href="http://nexe.gamedev.net/">NeXe </a>- NeXe's tutorials (hosted by Gamedev.net) <br />- <a href="http://www.wazooinc.com/tutorials">Wazoo Enterprises </a>- Erik Yuzwa's "Borg cube" tutorials <br />- <a href="http://www.mr-gamemaker.com/">Mr GameMaker </a>- DirectX discussion forums <br />- <a href="http://www.xdev.ru/dxgp/rgd_articles_e.asp?s=columns&amp;art=mrsdx8_0000">XDev.ru </a>- Mr Snow DirectX column <br />- <a href="http://www.ultimategameprogramming.com/index2.php">Ultimate Game Programming </a><br />- <a href="http://www.gametutorials.com/">GameTutorials: </a>Recently, the site began charging for tutorials - so be prepared to pay a small fee if you're willing to learn from there.<br /><br /><br /><font size="4"><b><i>DirectX Engines<br /></i></b></font>- <a href="http://www.ogre3d.org/">OGRE3D </a>- an open source 3D engine which supports DirectX <br />- <a href="http://www.radonlabs.de/">Radon Labs </a>- creators of the open source "Nebula Device" engine which supports DirectX <br />- <a href="http://irrlicht.sourceforge.net/">Irrlicht </a>- open source game engine which supports DirectX <br />- <a href="http://neoengine.sourceforge.net/">NeoEngine </a>- open source3 D engine which supports DirectX<br />- <a href="http://www.revolution3d.net/">Revolution3D </a>– free 3D engine built on DirectX <br />- <a href="http://www.urgh.cjb.net/">The Urgh! </a>Engine – free 3D engine built on DirectX <br />- <a href="http://www.3dlevel.com/">3DLevel </a>- VB.NET engines built on DirectX <br />- <a href="http://www.jtgame.com/jtmain.html">JTGame </a>- C++/DirectX game framework <br />- <a href="http://catmother.sourceforge.net/">CatMother </a>- source code and content for a (now defunct) commercial project using DirectX<img src ="http://www.cppblog.com/tx7do/aggbug/11740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-26 23:50 <a href="http://www.cppblog.com/tx7do/archive/2006/08/26/11740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[vim]Best of Vim Tips  </title><link>http://www.cppblog.com/tx7do/archive/2006/08/10/11103.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 10 Aug 2006 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/10/11103.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11103.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/10/11103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11103.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11103.html</trackback:ping><description><![CDATA[
		<table class="contentpaneopen">
				<tbody>
						<tr>
								<td class="createdate" valign="top" colspan="2">2005-07-06 </td>
						</tr>
						<tr>
								<td valign="top" colspan="2">
										<a href="http://blog.china-pub.com/more.asp?name=linxd&amp;id=10929">
												<font color="#336699">http://blog.china-pub.com/more.asp?name=linxd&amp;id=10929</font>
										</a> # note 015 : Best of Vim Tips                                          current<br />------------------------------------------------------------------------------<br />David Rayner (zzapper) 15 Years of Vi + 3 years of Vim and still learning<br />11Mar05 : Last Update<br /></td>
						</tr>
				</tbody>
				<li dragover="true">
						<a href="http://www.rayninfo.co.uk/tips/">
								<font color="#003366">zzapper's Tips Page</font>
						</a>
						<br />------------------------------------------------------------------------------<br />__BEGIN__<br />------------------------------------------------------------------------------<br /># searching<br />/joe/e                      : cursor set to End of match<br />/joe/e+1                    : cursor set to End of match plus 1<br />/joe/s-2                    : cursor set to Start of match minus 2<br />/^joe.*fred.*bill/          : normal<br />/^[A-J]\+/                  : search for lines beginning with one or more A-J<br />/begin\_.*end               : search over possible multiple lines<br />/fred\_s*joe/i              : any whitespace including newline<br />/fred\|joe                  : Search for FRED OR JOE<br />/\([^0-9]\|^\)%.*%          : Search for absence of a digit or beginning of line<br />/.*fred\&amp;.*joe              : Search for FRED AND JOE in any ORDER!<br />/\&lt;fred\&gt;/i                 : search for fred but not alfred or frederick<br />/\&lt;\d\d\d\d\&gt;               : Search for exactly 4 digit numbers<br />/\D\d\d\d\d\D               : Search for exactly 4 digit numbers<br />/\&lt;\d\{4}\&gt;                 : same thing<br /># finding empty lines<br />/^\n\{3}                    : find 3 empty lines<br /># Specify what you are NOT searching for (vowels)<br />/\c\v([^aeiou]&amp;\a){4}       : search for 4 consecutive consanants<br /># using rexexp memory in a search<br />/\(fred\).*\(joe\).*\2.*\1<br /># Repeating the Regexp (rather than what the Regexp finds)<br />/^\([^,]*,\)\{8}<br /># visual searching<br />:vmap // y/&lt;C-R&gt;"&lt;CR&gt;       : search for visually highlighted text<br />:vmap &lt;silent&gt; //    y/&lt;C-R&gt;=escape(@", '\\/.*$^~[]')&lt;CR&gt;&lt;CR&gt; : with spec chars<br /># searching over multiple lines \_ means including newline<br />/&lt;!--\_p\{-}--&gt;                   : search for multiple line comments<br />/fred\_s*joe/i                    : any whitespace including newline<br />/bugs\(\_.\)*bunny                : bugs followed by bunny anywhere in file<br />:h \_                             : help<br /># search for declaration of subroutine/function under cursor<br />:nmap gx yiw/^\(sub\&lt;bar&gt;function\)\s\+&lt;C-R&gt;"&lt;CR&gt;<br /># multiple file search<br />:bufdo /searchstr<br />:argdo /searchstr<br /># How to search for a URL without backslashing<br />?http://www.vim.org/        : search BACKWARDS!!! clever huh!<br />----------------------------------------<br />#substitution<br />:%s/fred/joe/igc            : general substitute command<br />:%s/\r//g                   : Delete DOS returns ^M<br /># Is your Text File jumbled onto one line? use following<br />:%s/\r/\r/g                 : Turn DOS returns ^M into real returns<br />:%s=  *$==                  : delete end of line blanks<br />:%s= \+$==                  : Same thing<br />:%s#\s*\r\?$##              : Clean both trailing spaces AND DOS returns<br />:%s#\s*\r*$##               : same thing<br /># deleting empty lines<br />:%s/^\n\{3}//               : delete blocks of 3 empty lines<br />:%s/^\n\+/\r/               : compressing empty lines<br />%s#&lt;[^&gt;]\+&gt;##g              : delete html tags, leave text<br /># IF YOU ONLY WANT TO KNOW ONE THING<br />:'a,'bg/fred/s/dick/joe/igc : VERY USEFUL<br /># duplicating columns<br />:%s= [^ ]\+$=&amp;&amp;=            : duplicate end column<br />:%s= \f\+$=&amp;&amp;=              : same thing<br />:%s= \S\+$=&amp;&amp;               : usually the same<br /># memory<br />:s/\(.*\):\(.*\)/\2 : \1/   : reverse fields separated by :<br />:%s/^\(.*\)\n\1/\1$/        : delete duplicate lines<br /># non-greedy matching \{-}<br />:%s/^.\{-}pdf/new.pdf/      : delete to 1st pdf only<br /># use of optional atom \?<br />:%s#\&lt;[zy]\?tbl_[a-z_]\+\&gt;#\L&amp;#gc : lowercase with optional leading characters<br /># over possibly many lines<br />:%s/&lt;!--\_.\{-}--&gt;//        : delete possibly multi-line comments<br />:help /\{-}                 : help non-greedy<br /># substitute using a register<br />:s/fred/&lt;c-r&gt;a/g            : sub "fred" with contents of register "a"<br />:s/fred/\=@a/g              : better alternative as register not displayed<br /># multiple commands on one line<br />:%s/\f\+\.gif\&gt;/\r&amp;\r/g | v/\.gif$/d | %s/gif/jpg/<br /># ORing<br />:%s/suck\|buck/loopy/gc     : ORing (must break pipe)<br /># Calling a VIM function<br />:s/__date__/\=strftime("%c")/ : insert datestring<br /># Working with Columns sub any str1 in col3<br />:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:<br /># Swapping first &amp; last column (4 columns)<br />:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:<br /># filter all form elements into paste register<br />:redir @*|sil exec 'g#&lt;\(input\|select\|textarea\|/\=form\)\&gt;#p'|redir END<br />:nmap ,z :redir @*&lt;Bar&gt;sil exec 'g@&lt;\(input\&lt;Bar&gt;select\&lt;Bar&gt;textarea\&lt;Bar&gt;/\=form\)\&gt;@p'&lt;Bar&gt;redir END&lt;CR&gt;<br /># decrement numbers by 3<br />:%s/\d\+/\=(3-submatch(0))/<br /># increment numbers by 6 on certain lines only<br />:g/loc\|function/s/\d/\=submatch(0)+6/<br /># better<br />:%s#txtdev\zs\d#\=submatch(0)+1#g<br />:h /\zs<br /># increment only numbers gg\d\d  by 6 (another way)<br />:%s/\(gg\)\@&lt;=\d\+/\=submatch(0)+6/<br />:h zero-width<br /># find replacement text, put in memory, then use \zs to simplify substitute<br />:%s/"\([^.]\+\).*\zsxx/\1/<br /># Pull word under cursor into LHS of a substitute<br />:nmap &lt;leader&gt;z :%s#\&lt;&lt;c-r&gt;=expand("&lt;cword&gt;")&lt;cr&gt;\&gt;#<br /># Pull Visually Highlighted text into LHS of a substitute<br />:vmap &lt;leader&gt;z :&lt;C-U&gt;%s/\&lt;&lt;c-r&gt;*\&gt;/<br />----------------------------------------<br /># all following performing similar task, substitute within substitution<br /># Multiple single character substitution in a portion of line only<br />:%s,\(all/.*\)\@&lt;=/,_,g     : replace all / with _ AFTER "all/"<br /># Same thing<br />:s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#<br /># Substitute by splitting line, then re-joining<br />:s#all/#&amp;^M#|s#/#_#g|-j!<br /># Substitute inside substitute<br />:%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/<br />----------------------------------------<br /># global command display (see tip 227)<br />:g/fred.*joe.*dick/         : display all lines fred,joe &amp; dick<br />:g/\&lt;fred\&gt;/                : display all lines fred but not freddy<br />:g/&lt;pattern&gt;/z#.5           : display with context<br />:g/&lt;pattern&gt;/z#.5|echo "=========="  : display beautifully<br />:g/^\s*$/d                  : delete all blank lines<br />:g!/^dd/d                   : delete lines not containing string<br />:v/^dd/d                    : delete lines not containing string<br />:g/fred/,/joe/d             : not line based (very powerfull)<br />:g/{/ ,/}/- s/\n\+/\r/g     : Delete empty lines but only between {...}<br />:v/\S/d                     : Delete empty lines (both types)<br />:v/./.,/./-1join            : compress empty lines<br />:g/^$/,/./-j                : compress empty lines<br />:g/&lt;input\|&lt;form/p          : ORing<br />:g/^/put_                   : double space file (pu = put)<br />:g/^/m0                     : Reverse file (m = move)<br />:g/^/t.                     : duplicate every line<br />:g/fred/t$                  : copy lines matching fred to EOF<br />:g/stage/t'a                : copy lines matching stage to marker a<br /># match all lines containing "somestr" between markers a &amp; b<br /># copy after line containing "otherstr"<br />:'a,'bg/somestr/co/otherstr/ : co(py) or mo(ve)<br /># as above but also do a substitution<br />:'a,'bg/str1/s/str1/&amp;&amp;&amp;/|mo/str2/<br />:%norm jdd                  : delete every other line<br /># incrementing numbers (type &lt;c-a&gt; as 5 characters)<br />:.,$g/^\d/exe "norm! \&lt;c-a&gt;": increment numbers<br />:'a,'bg/\d\+/norm! ^A       : increment numbers<br /># storing glob results (note must use APPEND)<br />:g/fred/y A                 : append all lines fred to register a<br />:'a,'b g/^Error/ . w &gt;&gt; errors.txt<br /># duplicate every line in a file wrap a print '' around each duplicate<br />:g/./yank|put|-1s/'/"/g|s/.*/Print '&amp;'/<br /># replace string with contents of a file, -d deletes the "mark"<br />:g/^MARK$/r tmp.ex | -d<br />----------------------------------------<br /># Global combined with substitute (power editing)<br />:'a,'bg/fred/s/joe/susan/gic :  can use memory to extend matching<br />:g/fred/,/joe/s/fred/joe/gic :  non-line based (ultra)<br />----------------------------------------<br /># Find fred before beginning search for joe<br />:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC<br />----------------------------------------<br /># Absolutely essential<br />----------------------------------------<br />* # g* g#           : find word under cursor (&lt;cword&gt;) (forwards/backwards)<br />%                   : match brackets {}[]()<br />.                   : repeat last modification<br />matchit.vim         : % now matches tags &lt;tr&gt;&lt;td&gt;&lt;script&gt; &lt;?php etc<br />&lt;C-N&gt;&lt;C-P&gt;          : word completion in insert mode<br />&lt;C-X&gt;&lt;C-L&gt;          : Line complete SUPER USEFUL<br />/&lt;C-R&gt;&lt;C-W&gt;         : Pull &lt;cword&gt; onto search/command line<br />/&lt;C-R&gt;&lt;C-A&gt;         : Pull &lt;CWORD&gt; onto search/command line<br />:set ignorecase     : you nearly always want this<br />:syntax on          : colour syntax in Perl,HTML,PHP etc<br />:h regexp&lt;C-D&gt;      : type control-D and get a list all help topics containing<br />                      regexp (plus use TAB to Step thru list)<br />----------------------------------------<br /># MAKE IT EASY TO UPDATE/RELOAD _vimrc<br />:nmap ,s :source $VIM/_vimrc<br />:nmap ,v :e $VIM/_vimrc<br />----------------------------------------<br />#VISUAL MODE (easy to add other HTML Tags)<br />:vmap sb "zdi&lt;b&gt;&lt;C-R&gt;z&lt;/b&gt;&lt;ESC&gt;  : wrap &lt;b&gt;&lt;/b&gt; around VISUALLY selected Text<br />:vmap st "zdi&lt;?= &lt;C-R&gt;z ?&gt;&lt;ESC&gt;  : wrap &lt;?=   ?&gt; around VISUALLY selected Text<br />----------------------------------------<br /># Exploring<br />:Exp(lore)                      : file explorer note capital Ex<br />:Sex(plore)                     : file explorer in split window<br />:ls                             : list of buffers<br />:cd ..                          : move to parent directory<br />:args                           : list of files<br />:lcd %:p:h                      : change to directory of current file<br />:autocmd BufEnter * lcd %:p:h   : change to directory of current file automatically (put in _vimrc)<br />----------------------------------------<br /># Buffer Explorer (Top Ten Vim Script)<br /># needs bufexplorer.vim  http://www.vim.org/script.php?script_id=42<br />\be                             : buffer explorer list of buffers<br />\bs                             : buffer explorer (split window)<br />----------------------------------------<br /># Changing Case<br />guu                             : lowercase line<br />gUU                             : uppercase line<br />Vu                              : lowercase line<br />VU                              : uppercase line<br />g~~                             : flip case line<br />vEU                             : Upper Case Word<br />vE~                             : Flip Case Word<br />ggguG                           : lowercase entire file<br /># Titlise Visually Selected Text (map for .vimrc)<br />vmap ,c :s/\&lt;\(.\)\(\k*\)\&gt;/\u\1\L\2/g&lt;CR&gt;<br /># Uppercase first letter of sentences<br />:%s/[.!?]\_s\+\a/\U&amp;\E/g<br />----------------------------------------<br />gf                              : open file name under cursor (SUPER)<br />:nnoremap gF :view &lt;cfile&gt;&lt;cr&gt;  : open file under cursor, create if necessary<br />ga                              : display hex,ascii value of char under cursor<br />ggVGg?                          : rot13 whole file<br />ggg?G                           : rot13 whole file (quicker for large file)<br />:8 | normal VGg?                : rot13 from line 8<br />:normal 10GVGg?                 : rot13 from line 8<br />&lt;C-A&gt;,&lt;C-X&gt;                     : increment,decrement number under cursor<br />                                  win32 users must remap CNTRL-A<br />&lt;C-R&gt;=5*5                       : insert 25 into text (mini-calculator)<br />----------------------------------------<br /># Makes all other tips superfluous<br />:h 42            : also http://www.google.com/search?q=42<br />:h holy-grail<br />:h!<br />----------------------------------------<br /># Markers &amp; moving about<br />'.               : jump to last modification line (SUPER)<br />`.               : jump to exact spot in last modification line<br />g;               : cycle thru recent changes (oldest first) (new in vim6.3)<br />g,               : reverse direction (new in vim6.3)<br />:changes<br />:h changelist    : help for above<br />&lt;C-O&gt;            : retrace your movements in file (starting from most recent)<br />&lt;C-I&gt;            : retrace your movements in file (reverse direction)<br />:ju(mps)         : list of your movements<br />:help jump-motions<br />:history         : list of all your commands<br />:his c           : commandline history<br />:his s           : search history<br />q/               : Search history Window<br />q:               : commandline history Window<br />:&lt;C-F&gt;           : history Window<br />----------------------------------------<br /># Abbreviations &amp; maps<br />:map   &lt;f7&gt;   :'a,'bw! c:/aaa/x<br />:map   &lt;f8&gt;   :r c:/aaa/x<br />:map   &lt;f11&gt;  :.w! c:/aaa/xr&lt;CR&gt;<br />:map   &lt;f12&gt;  :r c:/aaa/xr&lt;CR&gt;<br />:ab php          : list of abbreviations beginning php<br />:map ,           : list of maps beginning ,<br /># allow use of F10 for mapping (win32)<br />set wak=no       : :h winaltkeys<br /># For use in Maps<br />&lt;CR&gt;             : carriage Return for maps<br />&lt;ESC&gt;            : Escape<br />&lt;LEADER&gt;         : normally \<br />&lt;BAR&gt;            : | pipe<br />&lt;BACKSPACE&gt;      : backspace<br />#display RGB colour under the cursor eg #445588<br />:nmap &lt;leader&gt;c :hi Normal guibg=#&lt;c-r&gt;=expand("&lt;cword&gt;")&lt;cr&gt;&lt;cr&gt;<br />----------------------------------------<br /># Using a register as a map (preload registers in .vimrc)<br />:let @m=":'a,'bs/"<br />:let @s=":%!sort -u"<br />----------------------------------------<br /># List your Registers<br />:reg             : display contents of all registers<br />:reg a           : display content of individual registers<br />"1p....          : retrieve numeric registers one by one<br />:let @y='yy@"'   : pre-loading registers (put in .vimrc)<br />----------------------------------------<br /># Useful tricks<br />"ayy@a           : execute "Vim command" in a text file<br />yy@"             : same thing using unnamed register<br />u@.              : execute command JUST typed in<br />----------------------------------------<br /># Get output from other commands (requires external programs)<br />:r!ls.exe        : reads in output of ls<br />!!date           : same thing (but replaces/filters current line)<br /># Sorting with external sort<br />:%!sort -u       : use an external program to filter content<br />:'a,'b!sort -u   : use an external program to filter content<br />!1} sort -u      : sorts paragraph (note normal mode!!)<br />----------------------------------------<br /># Multiple Files Management (Essential)<br />:bn              : goto next buffer<br />:bp              : goto previous buffer<br />:wn              : save file and move to next (super)<br />:wp              : save file and move to previous<br />:bd              : remove file from buffer list (super)<br />:bun             : Buffer unload (remove window but not from list)<br />:badd file.c     : file from buffer list<br />:b 3             : go to buffer 3<br />:b main          : go to buffer with main in name eg main.c (ultra)<br />:sav php.html    : Save current file as php.html and "move" to php.html<br />:sav! %&lt;.bak     : Save Current file to alternative extension<br />:sav! %:r.cfm    : Save Current file to alternative extension<br />:e!              : return to unmodified file<br />:w c:/aaa/%      : save file elsewhere<br />:e #             : edit alternative file (also cntrl-^)<br />:rew             : return to beginning of edited files list (:args)<br />:brew            : buffer rewind<br />:sp fred.txt     : open fred.txt into a split<br />:sball,:sb       : Split all buffers (super)<br />:scrollbind      : in each split window<br />:map   &lt;F5&gt; :ls&lt;CR&gt;:e # : Pressing F5 lists all buffer, just type number<br />:set hidden      : Allows to change buffer w/o saving current buffer<br />----------------------------------------<br /># Quick jumping between splits<br />map &lt;C-J&gt; &lt;C-W&gt;j&lt;C-W&gt;_<br />map &lt;C-K&gt; &lt;C-W&gt;k&lt;C-W&gt;_<br />----------------------------------------<br /># Recording (BEST TIP of ALL)<br />qq  # record to q<br />your complex series of commands<br />q   # end recording<br />@q to execute<br />@@ to Repeat<br />5@@ to Repeat 5 times<br /># editing a register/recording<br />"qp                               :display contents of register q (normal mode)<br />&lt;ctrl-R&gt;q                         :display contents of register q (insert mode)<br /># you can now see recording contents, edit as required<br />"qdd                              :put changed contacts back into q<br />@q                                :execute recording/register q<br /># Operating a Recording on a Visual BLOCK<br />1) define recording/register<br />qq:s/ to/ from/g^Mq<br />2) Define Visual BLOCK<br />V}<br />3) hit : and the following appears<br />:'&lt;,'&gt;<br />4)Complete as follows<br />:'&lt;,'&gt;norm @q<br />----------------------------------------<br /># Visual is the newest and usually the BEST editing mode<br /># Visual basics<br />v                               : enter visual mode<br />V                               : visual mode whole line<br />&lt;C-V&gt;                           : enter VISUAL BLOCK mode<br />gv                              : reselect last visual area (ultra)<br />o                               : navigate visual area<br />"*y                             : yank visual area into paste buffer<br />V%                              : visualise what you match<br />V}J                             : Join Visual block (great)<br />V}gJ                            : Join Visual block w/o adding spaces<br />----------------------------------------<br /># Delete first 2 characters of 10 successive lines<br />0&lt;c-v&gt;10j2ld<br />----------------------------------------<br /># how to copy a set of columns using VISUAL BLOCK<br /># visual block (AKA columnwise selection) (NOT BY ordinary v command)<br />&lt;C-V&gt; then select "column(s)" with motion commands (win32 &lt;C-Q&gt;)<br />then c,d,y,r etc<br />----------------------------------------<br /># how to overwrite a visual-block of text with another such block<br />Pick the first block: ctrl-v move "ay<br />Pick the second block: ctrl-v move c ctrl-o "aP &lt;esc&gt;<br />----------------------------------------<br /># _vimrc essentials<br />:set incsearch : jumps to search word as you type (annoying but excellent)<br />:set wildignore=*.o,*.obj,*.bak,*.exe : tab complete now ignores these<br />:set shiftwidth=3                     : for shift/tabbing<br />:set vb t_vb=".                       : set silent (no beep)<br />:set browsedir=buffer                 : Maki GUI File Open use current directory<br />----------------------------------------<br /># launching Win IE<br />:nmap ,f :update&lt;CR&gt;:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p&lt;CR&gt;<br />:nmap ,i :update&lt;CR&gt;: !start c:\progra~1\intern~1\iexplore.exe &lt;cWORD&gt;&lt;CR&gt;<br />----------------------------------------<br /># FTPing from VIM<br />cmap ,r  :Nread ftp://209.51.134.122/public_html/index.html<br />cmap ,w  :Nwrite ftp://209.51.134.122/public_html/index.html<br />gvim ftp://209.51.134.122/public_html/index.html<br />----------------------------------------<br /># appending to registers (use CAPITAL)<br /># yank 5 lines into "a" then add a further 5<br />"a5yy<br />10j<br />"A5yy<br />----------------------------------------<br />[I     : show lines matching word under cursor &lt;cword&gt; (super)<br />----------------------------------------<br /># Conventional Shifting/Indenting<br />:'a,'b&gt;&gt;<br /># visual shifting (builtin-repeat)<br />:vnoremap &lt; &lt;gv<br />:vnoremap &gt; &gt;gv<br /># Block shifting (magic)<br />&gt;i{<br />&gt;a{<br /># also<br />&gt;% and &lt;%<br />----------------------------------------<br /># Redirection &amp; Paste register *<br />:redir @*                    : redirect commands to paste buffer<br />:redir END                   : end redirect<br />:redir &gt;&gt; out.txt            : redirect to a file<br /># Working with Paste buffer<br />"*yy                         : yank to paste<br />"*p                          : insert from paste buffer<br /># yank to paste buffer (ex mode)<br />:'a,'by*                     : Yank range into paste<br />:%y*                         : Yank whole buffer into paste<br /># filter non-printable characters from the paste buffer<br /># useful when pasting from some gui application<br />:nmap &lt;leader&gt;p :let @* = substitute(@*,'[^[:print:]]','','g')&lt;cr&gt;"*p<br />----------------------------------------<br /># Re-Formatting text<br />gq}                          : Format a paragraph<br />ggVGgq                       : Reformat entire file<br />Vgq                          : current line<br /># break lines at 70 chars, if possible after a ;<br />:s/.\{,69\};\s*\|.\{,69\}\s\+/&amp;\r/g<br />----------------------------------------<br /># Operate command over multiple files<br />:argdo %s/foo/bar/e          : operate on all files in :args<br />:bufdo %s/foo/bar/e<br />:windo %s/foo/bar/e<br />:argdo exe '%!sort'|w!       : include an external command<br />:bufdo /foo/<br />----------------------------------------<br /># Command line tricks<br />gvim -h                    : help<br />ls | gvim -                : edit a stream!!<br />cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : filter a stream<br />gvim -o file1 file2        : open into a split<br /># execute one command after opening file<br />gvim.exe -c "/main" joe.c  : Open joe.c &amp; jump to "main"<br /># execute multiple command on a single file<br />vim -c "%s/ABC/DEF/ge | update" file1.c<br /># execute multiple command on a group of files<br />vim -c "argdo %s/ABC/DEF/ge | update" *.c<br /># remove blocks of text from a series of files<br />vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c<br /># Automate editing of a file (Ex commands in convert.vim)<br />vim -s "convert.vim" file.c<br />#load VIM without .vimrc and plugins (clean VIM)<br />gvim -u NONE -U NONE -N<br /># Access paste buffer contents (put in a script/batch file)<br />gvim -c 'normal ggdG"*p' c:/aaa/xp<br /># print paste contents to default printer<br />gvim -c 's/^/\=@*/|hardcopy!|q!'<br /># gvim's use of external grep (win32 or *nix)<br />:grep somestring *.php     : creates a list of all matching files<br /># use :cn(ext) :cp(rev) to navigate list<br />:h grep<br />----------------------------------------<br /># GVIM Difference Function (Brilliant)<br />gvim -d file1 file2        : vimdiff (compare differences)<br />dp                         : "put" difference under cursor to other file<br />do                         : "get" difference under cursor from other file<br />----------------------------------------<br /># Vim traps<br />In regular expressions you must backslash + (match 1 or more)<br />In regular expressions you must backslash | (or)<br />In regular expressions you must backslash ( (group)<br />In regular expressions you must backslash { (count)<br />/fred\+/                   : matches fred/freddy but not free<br />/\(fred\)\{2,3}/           : note what you have to break<br />----------------------------------------<br /># \v or very magic (usually) reduces backslashing<br />/codes\(\n\|\s\)*where  : normal regexp<br />/\vcodes(\n|\s)*where   : very magic<br />----------------------------------------<br /># pulling objects onto command/search line (SUPER)<br />&lt;C-R&gt;&lt;C-W&gt; : pull word under the cursor into a command line or search<br />&lt;C-R&gt;&lt;C-A&gt; : pull WORD under the cursor into a command line or search<br />&lt;C-R&gt;-                  : pull small register (also insert mode)<br />&lt;C-R&gt;[0-9a-z]           : pull named registers (also insert mode)<br />&lt;C-R&gt;%                  : pull file name (also #) (also insert mode)<br />&lt;C-R&gt;=somevar           : pull contents of a variable (eg :let sray="ray[0-9]")<br />----------------------------------------<br /># manipulating registers<br />:let @a=@_              : clear register a<br />:let @a=""              : clear register a<br />:let @*=@a              : copy register a to paste buffer<br />map   &lt;f11&gt; "qyy:let @q=@q."zzz"<br />----------------------------------------<br /># help for help<br />:h quickref             : VIM Quick Reference Sheet (ultra)<br />:h tips                 : Vim's own Tips Help<br />:h visual&lt;C-D&gt;&lt;tab&gt;     : obtain  list of all visual help topics<br />                        : Then use tab to step thru them<br />:h ctrl&lt;C-D&gt;            : list help of all control keys<br />:helpg uganda           : grep HELP Files use :cn, :cp to find next<br />:h :r                   : help for :ex command<br />:h CTRL-R               : normal mode<br />:h /\r                  : what's \r in a regexp (matches a &lt;CR&gt;)<br />:h \\zs                 : double up backslash to find \zs in help<br />:h i_CTRL-R             : help for say &lt;C-R&gt; in insert mode<br />:h c_CTRL-R             : help for say &lt;C-R&gt; in command mode<br />:h v_CTRL-V             : visual mode<br />:h tutor                : VIM Tutor<br />&lt;C-[&gt;, &lt;C-T&gt;            : Move back &amp; Forth in HELP History<br />gvim -h                 : VIM Command Line Help<br />----------------------------------------<br /># where was an option set<br />:scriptnames            : list all plugins, _vimrcs loaded (super)<br />:verbose set history?   : reveals value of history and where set<br />:function               : list functions<br />:func SearchCompl       : List particular function<br />----------------------------------------<br /># making your own VIM help<br />:helptags /vim/vim63/doc  : rebuild all *.txt help files in /doc<br />:help add-local-help<br />----------------------------------------<br /># running file thru an external program (eg php)<br />map   &lt;f9&gt;   :w&lt;CR&gt;:!c:/php/php.exe %&lt;CR&gt;<br />map   &lt;f2&gt;   :w&lt;CR&gt;:!perl -c %&lt;CR&gt;<br />----------------------------------------<br /># capturing output of current script in a separate buffer<br />:new | r!perl #                   : opens new buffer,read other buffer<br />:new! x.out | r!perl #            : same with named file<br />----------------------------------------<br /># Inserting DOS Carriage Returns<br />:%s/nubian/&lt;C-V&gt;&lt;C-M&gt;&amp;/g          :  that's what you type<br />:%s/nubian/&lt;C-Q&gt;&lt;C-M&gt;&amp;/g          :  for Win32<br />:%s/nubian/^M&amp;/g                  :  what you'll see where ^M is ONE character<br />:%s/nubian/\r&amp;/g                  :  better<br />----------------------------------------<br /># automatically delete trailing Dos-returns,whitespace<br />autocmd BufRead * silent! %s/[\r \t]\+$//<br />autocmd BufEnter *.php :%s/[ \t\r]\+$//e<br />----------------------------------------<br /># perform an action on a particular file or file type<br />autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?<br />autocmd FileType *.pl exec('set fileformats=unix')<br />----------------------------------------<br /># Retrieving last command line command for copy &amp; pasting into text<br />i&lt;c-r&gt;:<br /># Retrieving last Search Command for copy &amp; pasting into text<br />i&lt;c-r&gt;/<br />----------------------------------------<br /># more completions<br />&lt;C-X&gt;&lt;C-F&gt;                        :insert name of a file in current directory<br />----------------------------------------<br /># Substituting a Visual area<br /># select visual area as usual (:h visual) then type :s/Emacs/Vim/ etc<br />:'&lt;,'&gt;s/Emacs/Vim/g               : REMEMBER you dont type the '&lt;.'&gt;<br />gv                                : Re-select the previous visual area (ULTRA)<br />----------------------------------------<br /># inserting line number into file<br />:g/^/exec "s/^/".strpart(line(".")."    ", 0, 4)<br />:%s/^/\=strpart(line(".")."     ", 0, 5)<br />:%s/^/\=line('.'). ' '<br />----------------------------------------<br />#numbering lines VIM way<br />:set number                       : show line numbers<br />:map &lt;F12&gt; :set number!&lt;CR&gt;       : Show linenumbers flip-flop<br />:%s/^/\=strpart(line('.')."        ",0,&amp;ts)<br />#numbering lines (need Perl on PC) starting from arbitrary number<br />:'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'<br />#Produce a list of numbers<br />#Type in number on line say 223 in an empty file<br />qqmnYP`n^Aq                       : in recording q repeat with @q<br /># increment existing numbers to end of file (type &lt;c-a&gt; as 5 characters)<br />:.,$g/^\d/exe "normal! \&lt;c-a&gt;"<br /># advanced incrementing<br />http://vim.sourceforge.net/tip_view.php?tip_id=150<br />----------------------------------------<br /># advanced incrementing (really useful)<br />" put following in _vimrc<br />let g:I=0<br />function! INC(increment)<br />let g:I =g:I + a:increment<br />return g:I<br />endfunction<br />" eg create list starting from 223 incrementing by 5 between markers a,b<br />:let I=223<br />:'a,'bs/^/\=INC(5)/<br />" create a map for INC<br />cab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/<br />----------------------------------------<br /># editing/moving within current insert (Really useful)<br />&lt;C-U&gt;                             : delete all entered<br />&lt;C-W&gt;                             : delete last word<br />&lt;HOME&gt;&lt;END&gt;                       : beginning/end of line<br />&lt;C-LEFTARROW&gt;&lt;C-RIGHTARROW&gt;       : jump one word backwards/forwards<br />&lt;C-X&gt;&lt;C-E&gt;,&lt;C-X&gt;&lt;C-Y&gt;             : scroll while staying put in insert<br />----------------------------------------<br />#encryption (use with care: DON'T FORGET your KEY)<br />:X                                : you will be prompted for a key<br />:h :X<br />----------------------------------------<br /># modeline (make a file readonly etc) must be in first/last 5 lines<br />// vim:noai:ts=2:sw=4:readonly:<br /># vim:ft=html:                    : says use HTML Syntax highlighting<br />:h modeline<br />----------------------------------------<br /># Creating your own GUI Toolbar entry<br />amenu  Modeline.Insert\ a\ VIM\ modeline &lt;Esc&gt;&lt;Esc&gt;ggOvim:ff=unix ts=4 ss=4&lt;CR&gt;vim60:fdm=marker&lt;esc&gt;gg<br />----------------------------------------<br /># A function to save word under cursor to a file<br />function! SaveWord()<br />   normal yiw<br />   exe ':!echo '.@0.' &gt;&gt; word.txt'<br />endfunction<br />map ,p :call SaveWord()<br />----------------------------------------<br /># function to delete duplicate lines<br />function! Del()<br />if getline(".") == getline(line(".") - 1)<br />   norm dd<br />endif<br />endfunction<br /><br />:g/^/ call Del()<br />----------------------------------------<br /># Digraphs (non alpha-numerics)<br />:digraphs                         : display table<br />:h dig                            : help<br />i&lt;C-K&gt;e'                          : enters �<br />i&lt;C-V&gt;233                         : enters � (Unix)<br />i&lt;C-Q&gt;233                         : enters � (Win32)<br />ga                                : View hex value of any character<br />#Deleting non-ascii characters (some invisible)<br />:%s/[&lt;C-V&gt;128-&lt;C-V&gt;255]//gi       : where you have to type the Control-V<br />:%s/[€-�]//gi                     : Should see a black square &amp; a dotted y<br />:%s/[&lt;C-V&gt;128-&lt;C-V&gt;255&lt;C-V&gt;01-&lt;C-V&gt;31]//gi : All pesky non-asciis<br />:exec "norm /[\x00-\x1f\x80-\xff]/"        : same thing<br />#Pull a non-ascii character onto search bar<br />yl/&lt;C-R&gt;"                         :<br />----------------------------------------<br /># All file completions grouped (for example main_c.c)<br />:e main_&lt;tab&gt;                     : tab completes<br />gf                                : open file under cursor  (normal)<br />main_&lt;C-X&gt;&lt;C-F&gt;                   : include NAME of file in text (insert mode)<br />----------------------------------------<br /># Complex Vim<br /># swap two words<br />:%s/\&lt;\(on\|off\)\&gt;/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g<br /># swap two words<br />:vnoremap &lt;C-X&gt; &lt;Esc&gt;`.``gvP``P<br />----------------------------------------<br /># Convert Text File to HTML<br />:runtime! syntax/2html.vim        : convert txt to html<br />:h 2html<br />----------------------------------------<br /># VIM has internal grep<br />:grep some_keyword *.c            : get list of all c-files containing keyword<br />:cn                               : go to next occurrence<br />----------------------------------------<br /># Force Syntax coloring for a file that has no extension .pl<br />:set syntax=perl<br /># Remove syntax coloring (useful for all sorts of reasons)<br />:set syntax off<br /># change coloring scheme (any file in ~vim/vim??/colors)<br />:colorscheme blue<br /># Force HTML Syntax highlighting by using a modeline<br /># vim:ft=html:<br />----------------------------------------<br />:set noma (non modifiable)        : Prevents modifications<br />:set ro (Read Only)               : Protect a file from unintentional writes<br />----------------------------------------<br /># Sessions (Open a set of files)<br />gvim file1.c file2.c lib/lib.h lib/lib2.h : load files for "session"<br />:mksession                        : Make a Session file (default Session.vim)<br />:q<br />gvim -S Session.vim               : Reload all files<br />----------------------------------------<br />#tags (jumping to subroutines/functions)<br />taglist.vim                       : popular plugin<br />:Tlist                            : display Tags (list of functions)<br />&lt;C-]&gt;                             : jump to function under cursor<br />----------------------------------------<br /># columnise a csv file for display only as may crop wide columns<br />:let width = 20<br />:let fill=' ' | while strlen(fill) &lt; width | let fill=fill.fill | endwhile<br />:%s/\([^;]*\);\=/\=strpart(submatch(1).fill, 0, width)/ge<br />:%s/\s\+$//ge<br /># Highlight a particular csv column (put in .vimrc)<br />function! CSVH(x)<br />    execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'<br />    execute 'normal ^'.a:x.'f,'<br />endfunction<br />command! -nargs=1 Csv :call CSVH(&lt;args&gt;)<br /># call with<br />:Csv 5                             : highlight fifth column<br />----------------------------------------<br /># folding : hide sections to allow easier comparisons<br />zf}                               : fold paragraph using motion<br />v}zf                              : fold paragraph using visual<br />zf'a                              : fold to mark<br />zo                                : open fold<br />zc                                : re-close fold<br />----------------------------------------<br /># displaying "invisible characters"<br />:set list<br />:h listchars<br />----------------------------------------<br /># How to paste "normal commands" w/o entering insert mode<br />:norm qqy$jq<br />----------------------------------------<br /># manipulating file names<br />:h filename-modifiers             : help<br />:w %                              : write to current file name<br />:w %:r.cfm                        : change file extention to .cfm<br />:!echo %:p                        : full path &amp; file name<br />:!echo %:p:h                      : full path only<br />&lt;C-R&gt;%                            : insert filename (insert mode)<br />"%p                               : insert filename (normal mode)<br />/&lt;C-R&gt;%                           : Search for file name in text<br />----------------------------------------<br /># delete without destroying default buffer contents<br />"_d                               : what you've ALWAYS wanted<br />"_dw                              : eg delete word (use blackhole)<br />----------------------------------------<br /># pull full path name into paste buffer for attachment to email etc<br />nnoremap &lt;F2&gt; :let @*=expand("%:p")&lt;cr&gt; :unix<br />nnoremap &lt;F2&gt; :let @*=substitute(expand("%:p"), "/", "\\", "g")&lt;cr&gt; :win32<br />----------------------------------------<br /># Simple Shell script to rename files w/o leaving vim<br />$ vim<br />:r! ls *.c<br />:%s/\(.*\).c/mv &amp; \1.bla<br />:w !sh<br />:q!<br />----------------------------------------<br /># count words in a text file<br />g&lt;C-G&gt;<br />----------------------------------------<br /># example of setting your own highlighting<br />:syn match DoubleSpace "  "<br />:hi def DoubleSpace guibg=#e0e0e0<br />----------------------------------------<br /># Programming keys depending on file type<br />:autocmd bufenter *.tex map &lt;F1&gt; :!latex %&lt;CR&gt;<br />:autocmd bufenter *.tex map &lt;F2&gt; :!xdvi -hush %&lt;.dvi&amp;&lt;CR&gt;<br />----------------------------------------<br /># reading Ms-Word documents, requires antiword<br />:autocmd BufReadPre *.doc set ro<br />:autocmd BufReadPre *.doc set hlsearch!<br />:autocmd BufReadPost *.doc %!antiword "%"<br />----------------------------------------<br /># a folding method<br />vim: filetype=help foldmethod=marker foldmarker=&lt;&lt;&lt;,&gt;&gt;&gt;<br />A really big section closed with a tag &lt;&lt;&lt; <br />--- remember folds can be nested --- <br />Closing tag &gt;&gt;&gt; <br />----------------------------------------<br /># Just Another Vim Hacker JAVH<br />vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"<br />----------------------------------------<br />__END__<br />----------------------------------------<br />If you liked these please return to www.vim.org<br />and vote for this tip (It does encourage me!!)<br /><a href="http://www.vim.org/tips/tip.php?tip_id=305"><font color="#003366">Tip 305</font></a><br />----------------------------------------<br />Please email any errors, tips etc to<br /><a href="http://ipng.besti.edu.cn/mailto:&lt;script%20language='JavaScript'%20type='text/javascript'&gt;%20&lt;!--%20var%20prefix%20=%20'ma'%20+%20'il'%20+%20'to';%20var%20path%20=%20'hr'%20+%20'ef'%20+%20'=';%20var%20addy47142%20=%20'david'%20+%20'@';%20addy47142%20=%20addy47142%20+%20'rayninfo'%20+%20'.'%20+%20'co'%20+%20'.'%20+%20'uk';%20document.write(%20'&lt;a%20'%20+%20path%20+%20'/''%20+%20prefix%20+%20':'%20+%20addy47142%20+%20'/'&gt;'%20);%20document.write(%20addy47142%20);%20document.write(%20'&lt;//a&gt;'%20);%20//--&gt;%20&lt;/script&gt;&lt;noscript&gt;%20此邮件地址受spam%20bots保护，需要使用%20Javascript%20功能来查阅。&lt;/noscript&gt;"><script language="JavaScript" type="text/javascript"><!-- 
var prefix = '&#109;a' + 'i&#108;' + '&#116;o'; 
var path = 'hr' + 'ef' + '='; 
var addy47142 = 'd&#97;v&#105;d' + '&#64;'; 
addy47142 = addy47142 + 'r&#97;yn&#105;nf&#111;' + '&#46;' + 'c&#111;' + '&#46;' + '&#117;k'; 
document.write( '<a ' + path + '\'' + prefix + ':' + addy47142 + '\'>' ); 
document.write( addy47142 ); 
document.write( '<\/a>' ); 
//--></script><a href="mailto:david@rayninfo.co.uk"><font color="#336699">david@rayninfo.co.uk</font></a><noscript> 
此邮件地址受spam bots保护，需要使用 Javascript 功能来查阅。
</noscript></a><br />----------------------------------------<br />updated version at http://www.rayninfo.co.uk/vimtips.html<br />----------------------------------------<br /># Information Sources<br />----------------------------------------<br /><a href="http://www.vim.org/"><font color="#003366">www.vim.org</font></a><br /><a href="http://groups.google.com/groups?group=comp.editors"><font color="#003366">comp.editors</font></a> "VIM" newsgroup<br /><a href="http://u.webring.com/hub?ring=vim&amp;id=14&amp;hub"><font color="#003366">VIM Webring</font></a><br /><a href="http://www.newriders.com/books/opl/ebooks/0735710015.html"><font color="#003366">Vim Book</font></a><br /><a href="http://vimdoc.sourceforge.net/cgi-bin/vim2html2.pl"><font color="#003366">Searchable VIM Doc</font></a><br /><a href="http://vimdoc.sourceforge.net/vimfaq.html"><font color="#003366">VIM FAQ</font></a><br /><a href="http://groups.google.com/groups?ie=UTF-8&amp;oe=GB2312&amp;th=c13b1ef9d7c20b9d"><font color="#003366">VimTips in Chinese</font></a><br />----------------------------------------<br /># : commands to neutralise &lt; for HTML display and publish<br /># use yy@" to execute following commands<br />:w!|sav! vimtips.html|:/^__BEGIN__/,/^__END__/s#&lt;#\&lt;#g|:w!|/tip[f]tp/|:!tipftp<br />----------------------------------------<br /></li>
		</table>
		<span class="article_seperator"> </span>
<img src ="http://www.cppblog.com/tx7do/aggbug/11103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-10 18:18 <a href="http://www.cppblog.com/tx7do/archive/2006/08/10/11103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>彩色的命令行 —— 使用 ANSI 色彩代码 </title><link>http://www.cppblog.com/tx7do/archive/2006/08/10/11101.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 10 Aug 2006 10:16:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/10/11101.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11101.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/10/11101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11101.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11101.html</trackback:ping><description><![CDATA[
		<p>
				<i>摘要</i>: 
</p>
		<p>
				<!-- articleabstract_start -->在 ANSI 兼容终端（例如 xterm、rxvt、konsole 等）里， 可以用彩色显示文本而不仅仅是黑白。 本文示范了如何使用粗体和彩色的文字</p>
		<p>参见：http://www.linuxfocus.org/ChineseGB/May2004/article335.shtml</p>
		<style type="text/css">
				<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-family:monospace,Courier }
 pre.code { font-family:monospace,Courier;background-color:#aedbe8; }
 p.cl { color:#EE9500 }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; 
           border-style:none; border-width:medium; border-color:#FFD700; 
           padding:0.5cm;  text-align:center }
 p.code { width:80%; alignment:center; background-color:#aedbe8; 
          border-style:none; border-width:medium; border-color:#aedbe8; 
          padding:0.1cm;  text-align:left }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; 
          border-width:medium; border-color:#AAAAAA; padding:0.5cm ; 
          margin-top:0.1cm; margin-right:1cm; margin-left:1cm; 
          text-align:center }
 .mark  { background-color:#e6e6ff }
-->
		</style>
		<h2>概述</h2>在现实生活中，每一位 Linux 使用者都要面对 Bash。 虽然第一眼看上去非常枯燥，但是又很多方法能够让你的 shell 足够的个性化。 shell 提示符的彩色增强让能够让你的 shell 独一无二， 而且还非常清晰易读。<br /><br />在本文中我以 Bash shell 为例。因为在不同的终端里的转义序列不完全相同， 所以在本文中我使用的是 ANSI 终端。 <a name="335lfindex1"> </a><h2>Shell 的配置</h2>shell 彩色配置出现在 bash 的个人配置文件 <i>~/.bashrc</i> 或者是全局配置文件 <i>/etc/bashrc</i> 里面。 可以通过 <i>bashrc</i> 里面的 PS1 变量来设置提示符的外观。 <br /><br />通常情况下，这个条目看起来应该是这个样子： 
<table><tbody><tr><td><pre class="code">~/.bashrc: PS1="\s-\v\$ "
</pre>\s 表示 shell 的名称，-\v 表示他的版本号。 在提示符的最后面我们放置了一个 $。这样看起来也许有点乏味， 所以不妨试试下面这种模式——这种模式在大多数 Linux 的发行版本下是默认的设置： <pre class="code">~/.bashrc: PS1="\u@\h \w \$ "
</pre></td></tr></tbody></table>这表示 用户@ 当前目录 $，这个是大部分 Linux 用户都熟悉的 shell 提示符。 <a name="335lfindex2"> </a><h2>转义序列</h2>要是通过彩色化提示符来增加个性化，就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。 转义序列通常都是以 ESC 开头（这也是它的命名原因）。 在 shell 里表示为 ^[。这种表示法需要一点时间去适应， 也可以用 \033 完成相同的工作（ESC 的 ASCII 码用十进制表示就是 27， = 用八进制表示的 33）。<br /><br />要直接在 shell 里面输入转义序列我们需要先按 ctrl-v：<i>CTRL-v ESC</i>。 <a name="335lfindex3"> </a><h2>使用 shell 的颜色</h2>下面我用一个提示符的例子来解释 shell 的颜色。 <pre class="code">~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]"
</pre>这样提示符就全部显示成绿色了。就像这样：<br /><center><table cellpadding="10" border="0"><tbody><tr><td bgcolor="#000000"><font color="#00ff00">nico@ebrain:~$</font></td></tr></tbody></table></center><br />\033 声明了转义序列的开始，然后是 [ 开始定义颜色。 后面的 0 定义了默认的字体宽度。稍后我会介绍其他的可用字符。 转义序列字符串要用 \[ 和 \] 括起来， 防止转义序列的文本显示在 shell 里占用太多的空间。<br /><br />下面我们要选择前景色（这里是 32，代表绿色）。背景色的 40 表示黑色。 要是不想让提示符后面的文字也变成绿色，我们用 \033[0m 关闭转义序列， \033[0m 是 shell 的默认颜色。前景色和背景色都有 8 种可用的选择。<br /><br />可选颜色：红色、绿色、黄色、蓝色、洋红、青色和白色。 他们对应的颜色代码是：30（黑色）、31（红色）、32（绿色）、 33（黄色）、34（蓝色）、35（洋红）、36（青色）、37（白色）。<br /><br />用同样色方法设置背景色，不过要把第一个数字“3”替换成“4”， 例如 40、41、42、43、44、45、46、47。<br /><br />示例： <pre class="code">~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"
</pre><br />这给了我们一个非常多彩的提示符：<br /><center><table cellpadding="10" border="0"><tbody><tr><td bgcolor="#000000"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td bgcolor="#0000ff"><font color="#ffffff">nico@</font></td><td bgcolor="#aa5500"><font color="#00ff00">ebrain:</font></td><td bgcolor="#ff3030"><font color="#aa5500">~$</font></td></tr></tbody></table></td></tr></tbody></table></center><br />我们使用 <i>export PS1="string"</i> 来测试这些设置， 稍后我们要把这些设置转移到 <i>.bashrc</i> 里面。 现在我的提示符看起来是这个样子： <pre class="code">PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] "
</pre><br /><center><table cellpadding="10" border="0"><tbody><tr><td bgcolor="#000000"><b><font color="#0000ff">[</font><font color="#ff0000">nico@ebrain:~</font><font color="#0000ff">]</font></b></td></tr></tbody></table></center><a name="335lfindex4"> </a><h2>文本属性</h2>刚才提到了，在第一个转义序列后面的“0”是提示符的文本的默认颜色设置。 对于文本属性来说，这些值是有意义的：0、1、22、4、24、5、25、7、27， 分别表示：默认值、粗体、非粗体、下划线、非下划线、闪烁、非闪烁、 反显、非反显。<br /><br />通过下面这一段短小的脚本，我们可以看看色彩组合。 <pre class="code">#!/bin/sh
############################################################
# Nico Golde &lt;nico(at)ngolde.de&gt; Homepage: http://www.ngolde.de
# Last change: Mon Feb 16 16:24:41 CET 2004
############################################################

for attr in 0 1 4 5 7 ; do
    echo "----------------------------------------------------------------"
    printf "ESC[%s;Foreground;Background - \n" $attr
    for fore in 30 31 32 33 34 35 36 37; do
        for back in 40 41 42 43 44 45 46 47; do
            printf '\033[%s;%s;%sm %02s;%02s  ' $attr $fore $back $fore $back
        done
    printf '\n'
    done
    printf '\033[0m'
done
</pre>这段脚本可以从 <a href="http://www.linuxfocus.org/common/src2/article335/showansicol.tar.gz" shape="RECT"><font color="#336699">showansicol.tar.gz</font></a> 下载，格式是 <i>tar.gz</i>。 <a name="335lfindex5"> </a><h2>另一个程序</h2>在 shell 中设置颜色不仅仅能创建更加漂亮的提示符， 在编写控制台程序的时候也非常有用。<br /><br />对于一个要使用彩色的程序员，就必须要使用类似 <i>slang</i> 或 <i>ncurses</i> 这样的的库，者通常会增加执行文件的大小。 <i>Ncurses</i> 有着或多或少的独立于终端的类型的优势。 <a name="335lfindex6"> </a><h2>C 语言示例</h2>用绿色打印“Hello Word”： <pre class="code">#include &lt;stdio.h&gt;
int main(void){
  const char *const green = "\033[0;40;32m";
  const char *const normal = "\033[0m";
  printf("%sHello World%s\n", green, normal);
  return 0;
}
</pre>另外一个有用的转义序列是 <i>printf("\033[2J")</i>，它和 <i>system(clear)</i> 完成的功能一样。但是可以不需要头文件 <i>unistd.h</i>。<br /><br />使用<i>printf("\033[1K")</i> 可以删除一行。 <a name="335lfindex7"> </a><h2>初始化脚本示例</h2>如果我们想在 <i>/etc/init.d</i> 的 <i>init</i> 脚本成功的执行后， 得到一个漂亮的、清晰易读的提示，而不是一个简单的 <i>'.'</i>， 我们可以再一次的使用转义序列。<br /><br />这是一段 <i>cron init script</i> 的摘录： <pre class="code">#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0

 case "$1" in
 start)  echo -n "Starting periodic command scheduler: cron"
     start-stop-daemon --start --quiet --exec /usr/sbin/cron

                 echo "."
;;

</pre>如果 <i>cron</i> 脚本执行成功就会显示一个句点。 可以用 [Ok] 给这些信息添加上彩色特征，通过改变 <i>echo</i> 字符串，例如： <pre class="code">#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0
case "$1" in
start)  echo -n "Starting periodic command scheduler: cron"
        start-stop-daemon --start --quiet --exec /usr/sbin/cron
echo "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]"
    ;;
</pre><p>把这个设置应用到所有的 <i>init</i>脚本上非常耗费时间， 除非使用转义序列 \033 —— 因为 <i>Ctrl-v</i> 不是作为一个字符来处理的。 <a name="335lfindex8"> </a></p><img src ="http://www.cppblog.com/tx7do/aggbug/11101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-10 18:16 <a href="http://www.cppblog.com/tx7do/archive/2006/08/10/11101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu下的C/C++环境搭建</title><link>http://www.cppblog.com/tx7do/archive/2006/08/10/11098.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 10 Aug 2006 10:05:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/10/11098.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11098.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/10/11098.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11098.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11098.html</trackback:ping><description><![CDATA[
		<p>我用的是Ubuntu的Server版本，安装是很容易的，非常之简单，不过安装之后的操作系统几乎是一个空白的操作系统，几乎什么都没有，所以都得安装好。<br /><br />因为是Dapper (6.06) 版本，所以我用以下方法更换软件源：<br /><br />vim /etc/apt/sources.list<br /><br />用以下内容替换文件中的所有内容</p>
		<p>deb <a href="http://archive.ubuntu.com/ubuntu/">http://archive.ubuntu.com/ubuntu/</a> dapper main restricted universe multiverse<br />deb <a href="http://archive.ubuntu.com/ubuntu/">http://archive.ubuntu.com/ubuntu/</a> dapper-security main restricted universe multiverse<br />deb <a href="http://archive.ubuntu.com/ubuntu/">http://archive.ubuntu.com/ubuntu/</a> dapper-updates main restricted universe multiverse<br />deb <a href="http://archive.ubuntu.com/ubuntu/">http://archive.ubuntu.com/ubuntu/</a> dapper-backports main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu-cn/">http://ubuntu.cn99.com/ubuntu-cn/</a> dapper main restricted universe multiverse</p>
		<p>这里你也可以直接使用更快速的ubuntu.cn99.com的源（推荐）: <br />deb <a href="http://ubuntu.cn99.com/ubuntu/">http://ubuntu.cn99.com/ubuntu/</a> dapper main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu/">http://ubuntu.cn99.com/ubuntu/</a> dapper-updates main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu/">http://ubuntu.cn99.com/ubuntu/</a> dapper-security main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu/">http://ubuntu.cn99.com/ubuntu/</a> dapper-backports main restricted universe multiverse<br />deb <a href="http://ubuntu.cn99.com/ubuntu-cn/">http://ubuntu.cn99.com/ubuntu-cn/</a> dapper main restricted universe multiverse</p>
		<p>这里你还可以使用速度也非常快的的mirror.lupaworld.com的源: <br />deb <a href="http://mirror.lupaworld.com/ubuntu/archive/">http://mirror.lupaworld.com/ubuntu/archive/</a> dapper main restricted universe multiverse<br />deb <a href="http://mirror.lupaworld.com/ubuntu/archive/">http://mirror.lupaworld.com/ubuntu/archive/</a> dapper-security main restricted universe multiverse<br />deb <a href="http://mirror.lupaworld.com/ubuntu/archive/">http://mirror.lupaworld.com/ubuntu/archive/</a> dapper-updates main restricted universe multiverse<br />deb <a href="http://mirror.lupaworld.com/ubuntu/archive/">http://mirror.lupaworld.com/ubuntu/archive/</a> dapper-backports main restricted universe multiverse<br />deb <a href="http://mirror.lupaworld.com/ubuntu/ubuntu-cn/">http://mirror.lupaworld.com/ubuntu/ubuntu-cn/</a> dapper main restricted universe multiverse</p>
		<p>如果是教育网用户推荐使用上海交通大学的源: <br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper-backports main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper-proposed main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper-security main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu/">http://ftp.sjtu.edu.cn/ubuntu/</a> dapper-updates main multiverse restricted universe<br />deb <a href="http://ftp.sjtu.edu.cn/ubuntu-cn/">http://ftp.sjtu.edu.cn/ubuntu-cn/</a> dapper bleeding main multiverse restricted universe</p>
		<p>教育网用户也推荐使用清华大学计算机系学生科协的源:<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper-backports main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper-proposed main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper-security main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu/">http://mirror.net9.org/ubuntu/</a> dapper-updates main multiverse restricted universe<br />deb <a href="http://mirror.net9.org/ubuntu-cn/">http://mirror.net9.org/ubuntu-cn/</a> dapper main multiverse restricted universe</p>
		<p>保存编辑好的文件 <br />sudo apt-get update<br /><br /><br />刚装好的系统的root是进不去的，需要更改密码：<br />sudo passwd root<br /><br />反正是内网用，所以就直接用root了，sudo太麻烦！<br /><br />接下来安装SSH用以远程登陆：<br />apt-get install ssh<br /><br />OK，接着装编译器：<br /><br />apt-get install gcc <br />apt-get install make<br />apt-get install autoconf<br />apt-get install automake<br />apt-get install libtool<br />apt-get install gdb<br />apt-get install g++<br /><br />编辑器，我偏好使用vim，就装上了它<br />apt-get install vim<br />默认下，vim是没有语法染色的，<br />修改/etc/vim/vimrc<br /><font size="2">只要把syntax on的注释去掉就可以了。<br /><br />想要让vim好用，还需要安装一些必须的插件，这里我引用两篇文章：<br /><br /></font></p>
		<blockquote>第一部分介绍了一些基本的 Vim 使用技巧。掌握这些技巧可以很大地提高编辑效率，但是 Vim 的强大功能并不仅限于此。Vim 还可以通过“插件”来进行功能扩展。精确地说，是通过脚本来进行扩展，脚本类型有插件、语法加亮、配色方案、文件类型检测等多种。大部分的脚本都是由 Vim 的用户写的，解决了用户身边的问题，使 Vim 变得更加有用。本章将介绍最常用的一些脚本，其中除了一个属于“语法加亮”脚本外，其它都属于“插件”类型。关于如何写脚本的一些基础知识将在下一部分进行一些介绍。</blockquote>
		<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
		<!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->
		<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
		<p>
				<a name="IDALS4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.1. gzip（压缩文件支持）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Bram Moolenar</p>
		<p>
				<b>网站脚本编号：</b>无（包含在 Vim 的标准发布之中）</p>
		<p>
				<b>安装说明：</b>无</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>该脚本使得 Vim 可以直接打开使用 gzip [1]、bzip2 [2] 和 compress [3] 压缩的文件（要求存在相应的命令行工具）。后缀为“.gz”、“.bz2”和“.Z”的文件会在打开时被动态解压缩，并在写操作时被自动重新压缩。</p>
		<p>打开压缩文件时，屏幕上出现一个（不正确的）“[noeol]”的提示是正常的，不必进行理睬。</p>
		<p>
				<a name="IDA3S4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.2. netrw（网络文件支持）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Charles E. Campbell, Jr.（绰号 Dr. Chip）</p>
		<p>
				<b>网站脚本编号：</b>1075（Vim 的标准发布之中可能包含一个较老的版本）</p>
		<p>
				<b>安装说明：</b>
		</p>
		<p>Vim 6.4 的标准发布带的版本是 42，较老、功能不齐全，但无须安装。建议：</p>
		<p>1. 在 Vim 网站上下载版本 62（更新的版本只能用于 Vim 7）；<br />2. 使用“tar xvfj netrw.tar.bz2 -C ~/.vim”解开；<br />3. 在Vim中运行“:helptags ~/.vim/doc”安装文档。</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>支持直接读写网络上的文件，支持的协议有 ftp、http、rsync、scp 等。比如，使用 FTP 协议以用户名 adah 打开服务器 server 上 ~/temp 目录下的 test.cpp 文件，可以直接在命令行上使用：</p>
		<p>
		</p>
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<pre>
												<code class="section">
														<font face="Lucida Console">vim ftp://adah@server/temp/test.cpp
</font>
												</code>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>Vim会自动提示用户输入口令，然后打开文件。</p>
		<p>更多的帮助内容请参考“:help netrw”。</p>
		<p>
				<a name="IDAZT4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.3. engspchk（英文拼写检查）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Charles E. Campbell, Jr.（绰号Dr. Chip）</p>
		<p>
				<b>网站脚本编号：</b>195</p>
		<p>
				<b>安装说明：</b>
				<br />在 Vim 网站上下载最新版本（engspchk.tar.gz）；<br />使用“tar xvfz engspchk.tar.gz -C ~/.vim”解开；<br />在Vim中运行“:helptags ~/.vim/doc”安装文档。<br />提示替换拼写功能需要 agrep [4]，可能需要另外下载安装。</p>
		<p>
				<b>功能说明：</b>
				<br />一个Vim专用的拼写检查器，其最主要的特点是：</p>
		<ul>
				<li>可以通过变量 spchkdialect 选择英语变体（英国、美国、加拿大），对于找不到的词、不常见的词、不在当前英语变体中的词以不同的方式加亮显示； 
</li>
				<li>支持用户词典（保存在 .vim/CVIMSYN 目录中）和项目词典（保存在被检查文件所在的目录中）； 
</li>
				<li>对于源代码文件，只对注释进行拼写检查，而不会对你的变量名称胡乱提抗议； 
</li>
				<li>通过词典文件可支持除英语以外的其它语言。</li>
		</ul>
		<p>图 5 中的窗口里 engspchk 正在运行中。其中可以看到，红色部分是插件所不能识别的单词，黄色部分是当前英文变体（缺省是美国英语）中不正确的拼法，而青色部分是很少见的单词。图中运行的是包含图形界面支持的 Vim，因而还可以看到一个名为 DrChip 的菜单项（参见图6），在其中可通过菜单选择拼写检查相关的各项功能；同时还能看到快捷键：“\ec”开始拼写检查，“\ee”结束拼写检查，“\ea”选择替换拼写，等等。在文本模式的 Vim 中，我们一般就只使用这些快捷键了。</p>
		<p>
				<br />
				<a name="IDAZU4AD">
						<b>图 5</b>
				</a>
				<br />
				<img height="442" alt="图 5" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_05.png" width="752" border="0" />
				<br />
				<br />
				<a name="IDAHV4AD">
						<b>图 6</b>
				</a>
				<br />
				<img height="442" alt="图 6" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_06.png" width="752" border="0" />
				<br />
		</p>
		<p>更多的帮助内容请参考“:help engspchk”。</p>
		<p>
				<a name="IDAVV4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.4. calendar（日历显示）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Yasuhiro Matsumoto</p>
		<p>
				<b>网站脚本编号：</b>52</p>
		<p>
				<b>安装说明：</b>
		</p>
		<p>在 Vim 网站上下载文件 calendar.vim，存到 ~/.vim/plugin 目录中。</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>图 6 的下半部分就是 calendar 的运行示例，是直接在正常模式下键入“\caL”显示出来的。光标在该窗口中时，可使用左箭头或上箭头显示前一个月，右箭头或下箭头显示后一个月，“t”回到“今天”，“q”关闭日历窗口。在有鼠标支持时，也可以使用鼠标在黄色字样的“Prev”、“Today”、“Next”上双击达到类似的效果。</p>
		<p>除使用“\caL”外，“\cal”也可以打开一个日历窗口，但显示位置是在 Vim 的左侧而不是下方。另外，命令“:Calendar”效果和“\cal”相同，但其后可以跟参数：一个参数的话表示月份，两个参数的话则分别表示年份和月份。“:CalendarH”与“:Calendar”类似，但日历窗口的打开位置和“\caL”（而不是“\cal”）一样，是在下方而不是左侧。</p>
		<p>
				<a name="IDAHW4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.5. project（文件的“项目”管理）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Aric Blumer</p>
		<p>
				<b>网站脚本编号：</b>69</p>
		<p>
				<b>安装说明：</b>
		</p>
		<p>1. 在 Vim 网站上下载最新版本（project-1.3.tar.gz）；<br />2. 使用“tar xvfz project-1.3.tar.gz -C ~/.vim”解开；<br />3. 在 Vim 中运行“:helptags ~/.vim/doc”安装文档。</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>该插件可以把文件组织成一棵树的形式，以便于查找和管理。使用命令“:Project”即可打开一个用户的“项目文件”（~/.vimprojects）。项目文件采用普通的文本文件的形式，非常易于浏览和修改。图 7 是一个示例。其中左边窗口部分的就是一棵项目树，完整内容如下：</p>
		<p>
				<br />
				<a name="IDA4W4AD">
						<b>图 7</b>
				</a>
				<br />
				<img height="442" alt="图7" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_07.png" width="768" border="0" />
				<br />
				<br />
		</p>
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<pre>
												<code class="section">
														<font face="Lucida Console">CvsMenu="~/.vim" CD=. {
 plugin/cvsmenu.vim
 doc/cvsmenu.txt
}
Nvwa="~/nvwa_local" CD=. {
 doc=doc {
  ChangeLog
  README
  webupdate.sh
 }
 nvwa=nvwa {
  bool_array.cpp
  debug_new.cpp
  mem_pool_base.cpp
  static_mem_pool.cpp
  bool_array.h
  class_level_lock.h
  cont_ptr_utils.h
  debug_new.h
  fast_mutex.h
  fixed_mem_pool.h
  mem_pool_base.h
  object_level_lock.h
  pctimer.h
  set_assign.h
  static_assert.h
  static_mem_pool.h
 }
}
</font>
												</code>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>在这个项目文件中存在两个项目：CvsMenu 和 Nvwa。引号中的内容表示路径，“CD=.”则表示打开该项目中的文件时，当前目录会更改到项目所在的目录。项目下面可以再分子项目，如 Nvwa 项目下有 doc 和 nvwa 两个子项目，没有“CD=.”表示打开子项目里的文件时不再更改当前目录。</p>
		<p>图中并没有显示出完整的内容，因为其中的内容可以折叠（缺省打开项目文件时是完全折叠起来的，即在上面的例子中，只能看到两个项目的名字“CvsMenu”和“Nvwa”）。在非文件名行上使用鼠标双击或回车键可以进行展开或折叠，在文件名行上使用鼠标双击或回车键则可以打开对应的文件。</p>
		<p>更多的帮助内容请参考“:help project”。</p>
		<p>
				<a name="IDAVX4AD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.6. taglist（源代码结构浏览）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Yegappan Lakshmanan</p>
		<p>
				<b>网站脚本编号：</b>273</p>
		<p>
				<b>安装说明：</b>
		</p>
		<p>1. 确保机器上有一个可用的 Exuberant Ctags 的版本（可以执行命令“ctags”）</p>
		<p>2. 在 Vim 网站上下载 taglist（假设为 taglist.zip）；</p>
		<p>3. 使用“unzip taglist.zip -d ~/.vim”解开；</p>
		<p>4. 在 Vim 中运行“:helptags ~/.vim/doc”安装文档。</p>
		<p>虽然 taglist 使用 ctags，但并不要求 tags 文件的存在。</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>使用命令“:Tlist”启用/关闭 taglist，效果请先看一下图 8。Taglist 的主要特性有：</p>
		<p>
				<br />
				<a name="IDAOQMYD">
						<b>图 8</b>
				</a>
				<br />
				<img height="309" alt="图8" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_08.png" width="700" border="0" />
				<br />
		</p>
		<ul>
				<li>可以显示宏（macro）、函数（function）、变量（variable）、类型定义（typedef）、类（class）、结构（struct）等多种内容信息； 
</li>
				<li>打开多个文件时，可以同时看到多个文件的结构信息； 
</li>
				<li>在左边的 taglist 窗口显示的名称上双击鼠标或按回车键，右边主窗口中会跳转到相应的定义位置； 
</li>
				<li>右边窗口中光标的位置改变，左边的窗口也会在 4 秒内（缺省值，参见“:help 'updatetime'”）黄色加亮显示相应的名称； 
</li>
				<li>在启用/关闭 taglist 时，插件能够自动改变当前 Vim 窗口的大小（不管是文本模式的 Vim 还是图形界面的 Vim），除非使用“:let Tlist_Inc_Winwidth=0”关闭这一功能（当使用这一功能导致兼容性问题时）。</li>
		</ul>
		<p>更多的帮助内容请参考“:help taglist”。</p>
		<p>
				<a name="IDACRMYD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.7. cvsmenu（CVS集成）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Thorsten Maerz/吴咏炜</p>
		<p>
				<b>网站脚本编号：</b>1245</p>
		<p>
				<b>安装说明：</b>
		</p>
		<p>1. 在 Vim 网站上下载文件 cvsmenu.vim，存到 ~/.vim/plugin 目录中；<br />2. 启动 gvim，在菜单中选择“CVS-Settings-Install-Install updates”（文本模式的 Vim 可以使用快捷键“,cgii”），从网上（SourceForge）的 CVS 中安装最新版本和帮助文档（此步骤可选）。</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>在 Vim 中集成 CVS [24]版本管理功能。该插件最初由 Thorsten Maerz 编写，在 2002 年以来没有再得到维护。我在 2005 年初开始使用这个插件后，非常喜欢它，修正了其中存在的错误，并一直维护该插件。如果大家发现有 bug，报告给我就可以了。</p>
		<p>主要功能可在图 9 的菜单中看到：</p>
		<p>
				<br />
				<a name="IDAYRMYD">
						<b>图 9</b>
				</a>
				<br />
				<img height="607" alt="图9" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_09.png" width="752" border="0" />
				<br />
		</p>
		<ul>
				<li>了解 CVS 环境的基本信息和 cvsmenu 中的变量设定（参见图 10）； <br /><a name="IDAJSMYD"><b>图 10</b></a><br /><img height="517" alt="图10" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_10.png" width="752" border="0" /><br /></li>
				<li>调整设定，安装更新版本； 
</li>
				<li>插入 CVS 的可扩展关键字，如“$Date$”、“$Id$”； 
</li>
				<li>对目录进行基本操作（cvs update 等）； 
</li>
				<li>接受附加参数的基本操作（文件比较等）； 
</li>
				<li>管理功能，如登录； 
</li>
				<li>删除类操作； 
</li>
				<li>打标签； 
</li>
				<li>观察（跟踪）和编辑功能； 
</li>
				<li>将本地文件和 CVS 中的文件进行比较（以 Vim 的分左右两列使用颜色加亮显示修改、增加、删除部分的比较方式；效果参见图 11）； <br /><a name="IDABTMYD"><b>图 11</b></a><br /><img height="442" alt="图11" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_11.png" width="768" border="0" /><br /></li>
				<li>显示文件每一行的更改人和更改时间（cvs annotate，参见图 12）； <br /><a name="IDARTMYD"><b>图 12</b></a><br /><img height="442" alt="图12" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_12.png" width="752" border="0" /><br /></li>
				<li>显示库的访问历史（cvs history）； 
</li>
				<li>显示文件修订日志（cvs log；参见图 13）； <br /><a name="IDACUMYD"><b>图 13</b></a><br /><img height="442" alt="图13" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_13.png" width="752" border="0" /><br /></li>
				<li>显示文件状态； 
</li>
				<li>显示较短的文件状态； 
</li>
				<li>根据本地信息显示文件状态（不访问库）； 
</li>
				<li>签出模块（cvs checkout）； 
</li>
				<li>查询更新； 
</li>
				<li>更新，如有冲突会高亮显示（cvs update）； 
</li>
				<li>取消修改； 
</li>
				<li>添加当前文件到 CVS 中（cvs add）； 
</li>
				<li>签入当前文件（cvs commit）； 
</li>
				<li>导入文件（cvs import）； 
</li>
				<li>添加并签入当前文件。</li>
		</ul>
		<p>根据实际使用的需要，除了修订错误之外，我加入了一些编码相关的支持。拿一个最实际的情况，如果使用“set encoding=utf-8”，但源代码中仍使用了 GBK 编码的中文字符，那么，必须在 .vimrc 中加入一行“let g:CVScvsoutputencoding='gbk'”才能保证“cvs annotate”操作的结果是正确的。</p>
		<p>Thorsten 把该插件的易用性设计得相当好。举例来说，在作文件比较时，按 Tab 可跳转到下一个不同处，左侧的比较窗口中按一下“q”即可关闭该窗口。更多的帮助内容请参考“:help cvsmenu”。</p>
		<p>
				<a name="IDA2UMYD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.8. doxygen（文档注释语法加亮）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Michael Geddes</p>
		<p>
				<b>网站脚本编号：</b>5</p>
		<p>
				<b>安装说明：</b>
		</p>
		<p>1. 在 Vim 网站上下载最新版本（doxygen.zip）；<br />2. 使用“unzip doxygen.zip”解开；<br />3. 执行“cp -p doxygen.vim ~/.vim/syntax”和“cp -p doxygen.txt ~/.vim/doc”复制文件到 Vim 目录下；<br />4. 在 Vim 中运行“:helptags ~/.vim/doc”安装文档。<br />5. 如果 ~/.vim/after/syntax 目录不存在，使用“mkdir -p ~/.vim/after/syntax”创建该目录；<br />6. 进入 ~/.vim/after/syntax 目录，使用下面三行创建语法文件之间的关联，使得在 C、C++ 和Java 文件中可以识别文档注释：</p>
		<p>
				<br />
		</p>
		<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
				<tbody>
						<tr>
								<td>
										<pre>
												<code class="section">
														<font face="Lucida Console">ln -s ../../syntax/doxygen.vim c.vim
ln -s ../../syntax/doxygen.vim cpp.vim
ln -s ../../syntax/doxygen.vim java.vim"
</font>
												</code>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>6. 可选地，看一下我的个人编程网页 [6] 下有没有对 doxygen.vim 的更新（里面包含有作者尚未并入到标准发布中去的我的更改——好奇的话，你可以在 doxygen.vim 文件中数一下，看一看 Wu Yongwei 的名字出现了几次:-)）。</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>如果你用过文档注释，相信我不需要多说，看一下图 14你就知道这个脚本的功能了。如果你没有用过文档注释，强烈建议你到 Doxygen [7] 的网站上看一下，了解一下这个非常有用的工具。作为示例，可在 <a href="http://nvwa.sourceforge.net/doc/debug__new_8cpp.html#a17"><font color="#5c81a7">http://nvwa.sourceforge.net/doc/debug__new_8cpp.html#a17</font></a> 看一下图中的代码使用 Doxygen 自动生成的 HTML 网页。</p>
		<p>
				<br />
				<a name="IDAGWMYD">
						<b>图 14</b>
				</a>
				<br />
				<img height="442" alt="图14" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_14.png" width="752" border="0" />
				<br />
		</p>
		<p>
				<a name="IDATWMYD">
						<span class="smalltitle">
								<strong>
										<font face="Arial" size="3">2.9. matrix（！）</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<strong>作者：</strong>Don Yang</p>
		<p>
				<b>网站脚本编号：</b>1189</p>
		<p>
				<b>安装说明：</b>
		</p>
		<p>在 Vim 网站上下载文件 matrix.vim，存到 ~/.vim/plugin 目录中即可。</p>
		<p>
				<b>功能说明：</b>
		</p>
		<p>是的，说的就是电影 Matrix！Vim 的脚本并不是都干“正经事”的。想看一下电影里那些酷酷的字符在 Vim 的窗口里翻滚吗？发一个命令“:Matrix”即可（按任意键退出）。效果见图 15。</p>
		<p>
				<br />
				<a name="IDAFXMYD">
						<b>图 15</b>
				</a>
				<br />
				<img height="475" alt="图15" src="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/Figure_15.png" width="673" border="0" />
				<br />
				<br />
		</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td>
										<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
										<br />
										<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" cellspacing="0" cellpadding="0" align="right">
				<tbody>
						<tr align="right">
								<td>
										<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
										<br />
										<table cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr>
																<td valign="center">
																		<img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" />
																		<br />
																</td>
																<td valign="top" align="right">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/#main">
																				<b>
																						<font color="#996699">回页首</font>
																				</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="IDASXMYD">
						<span class="atitle">
								<font face="Arial" size="4">参考资料</font>
						</span>
				</a>
		</p>
		<p>[1] The gzip home page: <a href="http://www.gzip.org/"><font color="#5c81a7">http://www.gzip.org/</font></a></p>
		<p>[2] bzip2: <a href="http://www.bzip.org/"><font color="#5c81a7">http://www.bzip.org/</font></a></p>
		<p>[3] Compress for UNIX: <a href="http://www.answers.com/compress#Wikipedia"><font color="#5c81a7">http://www.answers.com/compress#Wikipedia</font></a></p>
		<p>[4] agrep: <a href="http://www.answers.com/agrep"><font color="#5c81a7">http://www.answers.com/agrep</font></a></p>
		<p>[5] CVS-Concurrent Versions System: <a href="http://www.nongnu.org/cvs/"><font color="#5c81a7">http://www.nongnu.org/cvs/</font></a></p>
		<p>[6] Wu Yongwei's Programming Page: <a href="http://wyw.dcweb.cn/"><font color="#5c81a7">http://wyw.dcweb.cn/</font></a></p>
		<p>[7] Doxygen: <a href="http://www.stack.nl/~dimitri/doxygen/"><font color="#5c81a7">http://www.stack.nl/~dimitri/doxygen/</font></a><br /><br /><br /><br />另外一片：<br /><br /></p>
		<div class="tabBody">
				<a name="file000">
				</a>
				<p>以下是滇狐收集和整理的一些有用的 VIM 插件， 大部分插件都有自己详细的说明书，因此这里就不详细介绍每个插件的安装和使用方法了。 通过这些插件， VIM 能够变成一个非常强大的平台， Happy VIMming！ 如果想详细了解默认的插件插件安装路径，请看<a href="http://edyfox.codecarver.org/html/vimpluginspath.html">这里</a><a name="idx001"></a>。</p>
				<h1>
						<a name="hd001">
						</a>1 程序设计</h1>
				<h2>
						<a name="hd001001">
						</a>1.1 Tag List</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=273">官方站点</a></span><a name="idx002"></a></p>
				<p>官方描述： The “Tag List” plugin is a source code browser plugin for Vim and provides an overview of the structure of source code files and allows you to efficiently browse through source code files for different programming languages.</p>
				<p>滇狐评价： 这是一个非常非常非常非常重要的插件， 有了它， 我们才能够在 VIM 中查看一个文件中包含的函数列表， 或是一个类包含的方法列表， 为编程人员提供了极大方便。推荐大家一定要安装！</p>
				<p>安装注意事项： 有的系统内置的 ctags 功能太弱， 推荐大家安装 <span class="remote"><a class="remote" href="http://ctags.sourceforge.net/">EXUBERANT CTAGS</a></span><a name="idx003"></a>， 这个东西功能比较强大， 居然连 HTML 里面内嵌的 Java Script 都能够支持， 实在是匪疑所思！</p>
				<p>滇狐个人习惯： 滇狐习惯把方法列表放在屏幕的右侧， 于是在 .vimrc 中设置了</p>
				<div class="code">
						<pre>
								<font color="#a52a2a">
										<b>let</b>
								</font> Tlist_Use_Right_Window<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1</font></pre>
				</div>
				<p>另外， 滇狐习惯让当前不被编辑的文件的方法列表自动折叠起来， 这样可以节约一些屏幕空间，于是在 .vimrc 中设置了</p>
				<div class="code">
						<pre>
								<font color="#a52a2a">
										<b>let</b>
								</font> Tlist_File_Fold_Auto_Close<font color="#a52a2a"><b>=</b></font><font color="#ff00ff">1</font>。
</pre>
				</div>
				<h2>
						<a name="hd001002">
						</a>1.2 A</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=31">官方站点</a></span><a name="idx004"></a></p>
				<p>官方描述：</p>
				<p>A few of quick commands to swtich between source files and header files quickly.</p>
				<p>:A switches to the header file corresponding to the current file being edited (or vise versa)</p>
				<p>:AS splits and switches</p>
				<p>:AV vertical splits and switches</p>
				<p>E.g. if you are editing foo.c and need to edit foo.h simply execute :A and you will be editting foo.h, to switch back to foo.c execute :A again.</p>
				<p>滇狐评价： 第一眼看到这个东西时， 总觉得它功能太简单， 似乎没有什么用处。用过之后， 才发现这项功能对于一个程序员来说是如何重要！</p>
				<h2>
						<a name="hd001003">
						</a>1.3 Win Manager</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=1440">官方站点</a></span><a name="idx005"></a></p>
				<p>官方描述： winmanager is a plugin which implements a classical windows type IDE in Vim-6.0. Basically, you have the directory tree and the buffer list as 2 windows which stay on the left and the editing is done in a seperate area on the left. People have already made excellent File and Buffer explorers seperately and I thought that it might be a cool idea to combine them both. winmanager.vim combines the standard File Explorer which ships with Vim 6.0 and a Buffer Explorer written by Jeff Lanzarotta into one package.</p>
				<p>滇狐评价： 非常好用的东西， 在屏幕上打开一个文件浏览器， 这样就可以方便地选择要编辑的文件了。</p>
				<p>默认情况下， winmanager 依赖于 bufexplorer，到<span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=42">这里</a></span><a name="idx006"></a>下载。如果你不喜欢 bufexplorer 插件的话 可以在你的 .vimrc 中添加这条命令禁用它：</p>
				<div class="code">
						<pre>
								<font color="#a52a2a">
										<b>let</b>
								</font> g:winManagerWindowLayout <font color="#a52a2a"><b>=</b></font><font color="#ff00ff">"FileExplorer"</font></pre>
				</div>
				<p>这样就不需要下载该插件了。</p>
				<p>滇狐为 winfileexplorer.vim 加了一个补丁， 提供了使用系统默认打开方式打开选中文件的功能，只要把光标放在想要打开的文件上， 然后按“S”就可以了 (注意是大写)。这样以后就可以直接在 gvim 里打开 xmms， 不用再切换出来找 konqueror 了。</p>
				<h2>
						<a name="hd001004">
						</a>1.4 gdbvim</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=1386">官方站点</a></span><a name="idx007"></a>。</p>
				<p>官方描述： You have one window with (g)vim open, other window with gdb running. When you reach source line in your code, it appears in the vim window. In the opposite direction, you can send commands from vim to gdb (e.g., set breakpoints on given line).</p>
				<p>滇狐评价： 该插件意义很重大， 为我们在 VIM 中调试程序提供了可能。 虽然功能还非常少，但已经足以解决平常的大部分需求了。 原始版本问题比较多， 例如只能添加断点，不能删除断点， 滇狐为该插件添加了删除已加断点的功能。 另外快捷键的设置也比较不快捷，滇狐又顺便把相应的快捷键修改了一下， 现在用起来已经比较顺畅了， 放出来给大家参观一下，以便继续改进。 目前只在 Linux 下调试通过， 其它平台未经测试， 感兴趣的朋友可以在其它平台下测试，并汇报测试结果。</p>
				<p>需要继续增加的功能： 下一步滇狐准备再给这个插件加上保存所有断点的功能，这样下次调试的时候就不用重新设置断点了。 另外， 目前查看变量的值时，只能把结果打印到 console 窗口中， 滇狐希望在下一个版本中能够把查看结果抓取到 VIM 中显示。 VIM 网站上给出了把所有结果抓取到 VIM 中的实现， 但那不是滇狐希望的结果。滇狐最希望得到的结果是使用 tooltip 显示变量结果， 另外能够再提供一个 watch 窗口， 时刻监视变量的值， 以后慢慢实现吧。</p>
				<p>安装注意事项： gdbvim 脚本是使用 Perl 语言编写的， 因此需要安装 Perl。为了方便你的使用， 建议在 <code>$PATH</code> 路径下添加一个指向 <code>plugin/gdbvim</code> 脚本的符号链接， 或者直接将该文件复制到 <code>$PATH</code> 路径下，滇狐推荐前者。 还有， 最好在你的 .vimrc 中 <code>set noshowcmd</code>，否则大量的“请按 ENTER 继续”会把你活活烦死。 另外， 滇狐 patch 过的脚本依赖 <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=171">multvars.vim</a></span><a name="idx008"></a>，如果你使用滇狐版的话， 需要再安装这个插件。</p>
				<p>使用方法： 编译你的程序时加上 <code>-g</code> 参数生成调试信息， 然后使用“<code>gdbvim &lt;你的程序名&gt;</code>”启动 gdbvim， gdbvim 会自动启动一个 gvim。 将 gvim 最大化， 然后就可以使用 Gdb 菜单或快捷键添加断点、 单步调试程序、 查看变量值了。</p>
				<h2>
						<a name="hd001005">
						</a>1.5 jad</h2>
				<p>下载地址： 无。 自己将代码复制粘贴回去， 保存为 $HOME/.vim/plugins/jad.vim：</p>
				<div class="code">
						<pre>
								<font color="#a52a2a">
										<b>augr</b>
								</font> class
<font color="#a52a2a"><b>au</b></font>!
<font color="#a52a2a"><b>au</b></font><font color="#2e8b57"><b>bufreadpost</b></font>,<font color="#2e8b57"><b>filereadpost</b></font> *.class %!jad -noctor -ff -i -p <font color="#008b8b">%</font><font color="#a52a2a"><b>au</b></font><font color="#2e8b57"><b>bufreadpost</b></font>,<font color="#2e8b57"><b>filereadpost</b></font> *.class <font color="#a52a2a"><b>set</b></font><font color="#a020f0">readonly</font><font color="#a52a2a"><b>au</b></font><font color="#2e8b57"><b>bufreadpost</b></font>,<font color="#2e8b57"><b>filereadpost</b></font> *.class <font color="#a52a2a"><b>set</b></font><font color="#a020f0">ft</font>=java
<font color="#a52a2a"><b>au</b></font><font color="#2e8b57"><b>bufreadpost</b></font>,<font color="#2e8b57"><b>filereadpost</b></font> *.class normal gg<font color="#a52a2a"><b>=</b></font>G
<font color="#a52a2a"><b>au</b></font><font color="#2e8b57"><b>bufreadpost</b></font>,<font color="#2e8b57"><b>filereadpost</b></font> *.class <font color="#a52a2a"><b>set</b></font><font color="#a020f0">nomodified</font><font color="#a52a2a"><b>au</b></font><font color="#2e8b57"><b>bufreadpost</b></font>,<font color="#2e8b57"><b>filereadpost</b></font> *.class <font color="#a52a2a"><b>set</b></font><font color="#a020f0">nomodifiable</font><font color="#a52a2a"><b>augr</b></font> END
</pre>
				</div>
				<p>官方描述： (无)</p>
				<p>滇狐评价： 挺好玩的插件， 不过似乎也只是好玩而已。 安装了之后可以直接双击打开 .class 文件， VIM 会自动调用 jad 把文件反编译了。</p>
				<p>安装注意事项：需要先安装一份 <span class="remote"><a class="remote" href="http://kpdus.tripod.com/jad.html">jad</a></span><a name="idx009"></a>。</p>
				<h2>
						<a name="hd001006">
						</a>1.6 cscope_maps</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://cscope.sourceforge.net/cscope_maps.vim">官方站点</a></span><a name="idx0010"></a></p>
				<p>官方描述： Cscope is a very handy tool, but it’s even better when you don’t ever have to leave the comfort of your favorite editor (i.e. Vim) to use it. Fortunately, Cscope support has been built into Vim.</p>
				<p>滇狐评价： 滇狐目前 cscope 用得不如 ctags 多， 许多功能都不大熟。 不过既然大家都说好，那还是装着玩玩吧。</p>
				<p>安装注意事项： 需要安装 <span class="remote"><a class="remote" href="http://cscope.sourceforge.net/">cscope</a></span><a name="idx0011"></a>。</p>
				<h2>
						<a name="hd001007">
						</a>1.7 project</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=69">官方站点</a></span><a name="idx0012"></a></p>
				<p>官方描述： You can use this plugin’s basic functionality to set up a list of frequently-accessed files for easy navigation. The list of files will be displayed in a window on the left side of the Vim window, and you can press &lt;Return&gt; or double-click on filenames in the list to open the files. This is similar to how some IDEs I’ve used work. I find this easier to use than having to navigate a directory hierarchy with the file-explorer. It also obviates the need for a buffer explorer because you have your list of files on the left of the Vim Window.</p>
				<p>滇狐评价： 食之无肉，弃之有味。</p>
				<p>安装注意事项： 几乎没怎么用过， 所以暂时没有发现需要注意的地方。</p>
				<h1>
						<a name="hd002">
						</a>2 文档编写</h1>
				<h2>
						<a name="hd002001">
						</a>2.1 VIM LaTeX Suite</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://vim-latex.sourceforge.net/">官方站点</a></span><a name="idx0013"></a></p>
				<p>官方描述：</p>
				<p>Vim is undoubtedly one of the best editors ever made. LaTeX is an extremely powerful, intelligent typesetter. Vim-LaTeX aims at bringing together the best of both these worlds.</p>
				<p>We attempt to provide a comprehensive set of tools to view, edit and compile LaTeX documents without needing to ever quit Vim. Together, they provide tools starting from macros to speed up editing LaTeX documents to compiling tex files to forward searching .dvi documents.</p>
				<p>See the features page for a brief tour of the various features in LaTeX-suite. All these features can be tuned extensively using the included texrc file. The screenshots page shows you how a typical working session with LaTeX-suite might progress.</p>
				<p>LaTeX-suite is made for Vim versions 6.0 and above. Installation instructions are given in the download page.</p>
				<p>滇狐评价： 实在是非常非常非常非常好的一个插件！ 用 VIM 写 LaTeX 的朋友无论如何都要试一试，不用 VIM 写 LaTeX 的朋友也要试一试， 说不定你会改变你的主意， 改用 VIM 写 LaTeX。</p>
				<p>安装注意事项： 如果使用 gvim 的话， 需要注意 scim 可能会和 LaTeX Suite 有冲突。 解决方法是要么把 scim 的 on the spot 功能去掉， 或者把 gtk_im_module 设为 scim。 (较新版本 scim 建议第二种方案)。</p>
				<p>另外， 为了提高工作效率， 强烈建议配置 VIM 的<a href="http://edyfox.codecarver.org/html/vimlatex.html">LaTeX 正向、反向搜索</a><a name="idx0014"></a>功能。</p>
				<h2>
						<a name="hd002002">
						</a>2.2 sketch</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=705">官方站点</a></span><a name="idx0015"></a></p>
				<p>官方描述： Sketch.vim – Line drawing/painting using the mouse. Based on an idea by Morris.</p>
				<p>滇狐评价： 很好玩， 虽然用到的时候不多， 但真一旦用到了， 还是会觉得这个东西很有用的。</p>
				<p>安装注意事项： 建议在 .vimrc 中把 call ToggleSketch() 映射为命令，方便一些：</p>
				<div class="code">
						<pre>
								<font color="#a52a2a">
										<b>command</b>
								</font>
								<font color="#a52a2a">
										<b>-</b>
								</font>
								<font color="#a020f0">nargs</font>
								<font color="#a52a2a">
										<b>=</b>
								</font>
								<font color="#2e8b57">
										<b>0</b>
								</font> ToggleSketch <font color="#a52a2a"><b>call</b></font> ToggleSketch()
</pre>
				</div>
				<h1>
						<a name="hd003">
						</a>3 日常生活</h1>
				<h2>
						<a name="hd003001">
						</a>3.1 Calendar</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=52">官方站点</a></span><a name="idx0016"></a></p>
				<p>官方描述： This script create calender window. This don’t use the external program (cal).</p>
				<p>滇狐评价： 安装完毕后使用 :Calendar 命令打开一个垂直的日历窗口， 使用 :CalendarH 命令打开水平的日历窗口。 应该还是比较有用的。</p>
				<p>安装注意事项： 滇狐个人喜欢把日记的扩展名改成 .txt， 默认的是 .cal。在 calendar.vim 里面查找替换一下就可以了。 另外， 可以在 .vimrc 里面修改日记所在的路径，默认是 ~/diary。</p>
				<div class="code">
						<pre>
								<font color="#a52a2a">
										<b>let</b>
								</font> g:calendar_diary<font color="#a52a2a"><b>=&lt;</b></font>PATH<font color="#a52a2a"><b>&gt;</b></font></pre>
				</div>
				<h2>
						<a name="hd003002">
						</a>3.2 vimtips</h2>
				<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=88">官方站点</a></span><a name="idx0017"></a></p>
				<p>官方描述：</p>
				<p>Whenever you start Vim (but no more than daily) the script will open a help window with a Vim tip. You must download the tips separately, from <span class="remote"><a class="remote" href="http://www.vim.org/tips/tip_download.php">官方站点</a></span><a name="idx0018"></a></p>
				<p>After installation, you can get the next tip with</p>
				<div class="code">
						<pre>:TipOfTheDay
</pre>
				</div>
				<p>滇狐评价： 每天看一条，慢慢就变成 VIM 牛了。</p>
				<p>安装注意事项： 暂时没发现。</p>
				<h2>
						<a name="hd003003">
						</a>3.3 <a href="http://edyfox.codecarver.org/html/viki.html">ViKi</a><a name="idx0019"></a></h2>
				<p>你现在看到的这张网页就是使用 <a href="http://edyfox.codecarver.org/html/viki.html">ViKi</a><a name="idx0020"></a> 制作的。 也许它不漂亮， 但是很清秀， 而且添加信息非常方便。 是 <a href="http://edyfox.codecarver.org/html/viki.html">ViKi</a><a name="idx0021"></a> 将滇狐从繁重的 Html 编辑工作中解放出来， 使滇狐有足够的勇气重新开始制作个人主页。 为了更好地说明 <a href="http://edyfox.codecarver.org/html/viki.html">ViKi</a><a name="idx0022"></a>，滇狐将该插件的使用单独放到<a href="http://edyfox.codecarver.org/html/viki.html">另一张网页</a><a name="idx0023"></a>中。</p>
		</div>
<img src ="http://www.cppblog.com/tx7do/aggbug/11098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-10 18:05 <a href="http://www.cppblog.com/tx7do/archive/2006/08/10/11098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HLSW的另一种用法 </title><link>http://www.cppblog.com/tx7do/archive/2006/07/31/10724.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 31 Jul 2006 04:02:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/31/10724.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/10724.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/31/10724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/10724.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/10724.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td width="98%" height="30">
										<strong>HLSW的另一种用法</strong>
								</td>
						</tr>
						<tr>
								<td valign="top">
								</td>
								<td id="fontzoom" valign="top">众所周知HLSW是许多OP都拿来远程管理服务器的必不可少的软件，但你们有没有发现HLSW的另外一种用法？这个用法对于一般玩家都适用。<br /><br />　　先说一般情况，很多人玩CS都会遇到以下两种情况，一就是不小心切换了出桌面，那有可能就会切换不回CS里面，或者是切回去回没有声音。二就是对于那些用域名绑定动态IP的服务器，下一次改变了IP的话就连不上，这<br />就要自己修改favsvrs.dat文件。这下可好了，用了HLSW就没有以上两种麻烦了，也就是今天要说的HLSW的另一种用法。<br /><br /><br />　　首先点击settings里的settings...就入设置界面。<br /><br /><img src="http://www.gameing.net.cn/img/2005991611412577801.jpg" /><br /><br />然后点击Half-Life项目<br /><br /><img src="http://www.gameing.net.cn/img/2005991611440677802.jpg" /><br /><br />按浏览找出你CS执行文件cstrike.exe或者HL.exe所在目录，记得也要勾选下面的-console项，不然进到CS里就没了控制台。<br /><br /><img src="http://www.gameing.net.cn/img/2005991611445377803.jpg" /><br /><br />然后按OK回到主界面，之后只要在P/Port:那栏输入CS服务器的ip或者域名<br /><br /><img src="http://www.gameing.net.cn/img/2005991611454677804.jpg" /><br /><br />　　最后只要按鼠标箭头所指的按钮就可以进入你选定的CS服务器了。<br /><br />　　当然如果无故切换出桌面的话，不用着急，只要再切换到CS里面后，再按一下\\\"ESC\\\"键，再回到游戏，或者直接按两下\\\"ESC\\\"键，那声音就会又回来啦。~~<br /><br />　　欢迎大家和我交流关于建服务器和CS软件方面使用心得(打比赛免问) 　　envy <br />　　QQ：1092930　ICQ：6157624<br />　　EMAIL：envy@bfcn.net　MSN：envydu@msn.com<br /><br />　　下载HLSW软件请点击下面连接:<br />　　http://www.hlsw.net/</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/tx7do/aggbug/10724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-31 12:02 <a href="http://www.cppblog.com/tx7do/archive/2006/07/31/10724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> VC轻松实现CTreeCtrl控件双击响应</title><link>http://www.cppblog.com/tx7do/archive/2006/07/25/10504.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Tue, 25 Jul 2006 13:01:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/25/10504.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/10504.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/25/10504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/10504.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/10504.html</trackback:ping><description><![CDATA[ClassWizard为CTreeCtrl（树控件）添加的NM_DBLCLK（双击）消息的响应函数中带有一个NMHDR * 型指针形参：<br /><br />OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult) <br /><br />　　这个陌生的指针类型常使初用树控件的编程者陷入迷茫之中。实际上我们完全不理会它，也可以实现树控件的双击响应，即在OnDblClkTree( )函数中调用树控件的成员函数CTreeCtrl::GetSelectedItem( )以获取树控件的子项句柄HTREEITEM，得到此句柄后，我们便可用下列成员函数获取子项各种有用信息：<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">　　CTreeCtrl::GetItemData( )、<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />　　CTreeCtrl::GetItemHeight( )、<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />　　CTreeCtrl::GetItemImage( )、<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />　　CTreeCtrl::GetItemRect( )、<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />　　CTreeCtrl::GetItemState( )、<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />　　CTreeCtrl::GetItemText( )。 <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br />　　例程运行结果如下图所示：<br /><br /><img src="http://www.evget.com/articleimage/treectrl.gif" /><br /><br />　　示例代码如下：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> CTreeCtrlDlg : </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> CDialog<br /><img id="Codehighlighter1_36_316_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_316_Open_Text.style.display='none'; Codehighlighter1_36_316_Closed_Image.style.display='inline'; Codehighlighter1_36_316_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_36_316_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_36_316_Closed_Text.style.display='none'; Codehighlighter1_36_316_Open_Image.style.display='inline'; Codehighlighter1_36_316_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_36_316_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_36_316_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/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />HTREEITEM m_hTreeItem;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />CImageList m_ImgLst;<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" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Dialog Data<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{{AFX_DATA(CTreeCtrlDlg)</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_143_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_171_Open_Text.style.display='none'; Codehighlighter1_143_171_Closed_Image.style.display='inline'; Codehighlighter1_143_171_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_143_171_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_171_Closed_Text.style.display='none'; Codehighlighter1_143_171_Open_Image.style.display='inline'; Codehighlighter1_143_171_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_143_171_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_143_171_Open_Text"><span style="COLOR: #000000">{ IDD </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> IDD_TREECTRL_DIALOG }</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />CTreeCtrl m_wndTree;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">与对话框中树控件相关联<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}}AFX_DATA<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" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Implementation</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />afx_msg </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> OnDblClkTree(NMHDR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pNMHDR, LRESULT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pResult);<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" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> CTreeCtrlDlg::OnDblClkTree(NMHDR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pNMHDR, LRESULT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pResult) <br /><img id="Codehighlighter1_386_557_Open_Image" onclick="this.style.display='none'; Codehighlighter1_386_557_Open_Text.style.display='none'; Codehighlighter1_386_557_Closed_Image.style.display='inline'; Codehighlighter1_386_557_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_386_557_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_386_557_Closed_Text.style.display='none'; Codehighlighter1_386_557_Open_Image.style.display='inline'; Codehighlighter1_386_557_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_386_557_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_386_557_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />m_hTreeItem </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> m_wndTree.GetSelectedItem();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">以GetItemText()函数为例：</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">CString S1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> m_wndTree.GetItemText(m_hTreeItem);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />AfxMessageBox(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">You have selected </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">S1);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pResult </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span></div><img src ="http://www.cppblog.com/tx7do/aggbug/10504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-25 21:01 <a href="http://www.cppblog.com/tx7do/archive/2006/07/25/10504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构建企业web邮件服务器的两套方案</title><link>http://www.cppblog.com/tx7do/archive/2006/07/25/10503.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Tue, 25 Jul 2006 12:48:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/25/10503.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/10503.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/25/10503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/10503.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/10503.html</trackback:ping><description><![CDATA[2003年9月份的&lt;网管员世界&gt;中有两篇文章，提出两个方案：<br />1）solaris8 for x86/Redhat 7.2+qmail+vpopmail+mysql+igenus<br />2）RedHat8+Sendmail+SASL+pop3+Open WebMail.<img src ="http://www.cppblog.com/tx7do/aggbug/10503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-25 20:48 <a href="http://www.cppblog.com/tx7do/archive/2006/07/25/10503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决apache Web服务器网页显示乱码的方法</title><link>http://www.cppblog.com/tx7do/archive/2006/07/25/10500.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Tue, 25 Jul 2006 12:36:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/25/10500.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/10500.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/25/10500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/10500.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/10500.html</trackback:ping><description><![CDATA[  解决的方法之一: <br />  (1)在每一个网页里增加 <br />&lt;meta http-equiv="Content-Language" content="zh-cn"&gt;; <br />&lt;meta http-equiv="Content-Type" content="text/html; charset=GB2312"&gt;; <br />并在APACHE的httpd.conf配置文件中将AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset off <br /><br />解决的方法之二: <br />   直接在httpd.conf配置文件中将AddDefaultCharset ISO-8859-1 改为  <br />     AddDefaultCharset GB2312 .ZH-CN .zh-cn <br />   上述两种方法都可以解决apache Web服务器网页显示乱码的问题。 其中以第二种方法最好最简单，且一劳永逸。 <br /><img src ="http://www.cppblog.com/tx7do/aggbug/10500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-25 20:36 <a href="http://www.cppblog.com/tx7do/archive/2006/07/25/10500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用doxygen</title><link>http://www.cppblog.com/tx7do/archive/2006/07/19/10236.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 19 Jul 2006 14:18:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/19/10236.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/10236.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/19/10236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/10236.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/10236.html</trackback:ping><description><![CDATA[ <spanstyle>撰文<spanlang>/<ahref>K.Young         <spanstyle>翻译<spanlang>/<ahref><fontface>马维达<p></p><palign><spanlang>（<fontface>已发表在《程序员》2002年第3期上）<p></p><pclass><b><spanstyle>一、介绍</spanstyle></b><p></p><pclass><spanlang>GLAST<spanstyle>软件已采用<spanlang>doxygen<spanstyle>（<spanlang>GNUGPL<spanstyle>软件）来作为文档工具，本文将对其进行简单的介绍。要了解更详细的信息及下载<spanlang>doxygen<spanstyle>程序，请访问网站<spanlang><ahref text-indent:21pt;word-break:break-all"=""><spanstyle>什么是<spanlang>doxygen<spanstyle>呢？下面的介绍录自<spanlang>doxygen<spanstyle>的网页：<p></p><pclass><spanstyle>“<spanlang>doxygen<spanstyle>是一种用于<spanlang>C++<spanstyle>、<spanlang>IDL<spanstyle>（<spanlang>Corba<spanstyle>、<spanlang>Microsoft<spanstyle>和<spanlang>KDE-2DCOP<spanstyle>风格）和<spanlang>C<spanstyle>的文档系统。它可以通过三种方式来帮助你：<p></p><pclass><spanlang>1.<spanstyle>       <spanstyle>它可以从一组标有文档的源文件中生成在线文档浏览器（<spanlang>HTML<spanstyle>格式），以及<spanlang>/<spanstyle>或者离线参考手册（<spanlang>LATEX<spanstyle>格式）。同时还支持生成<spanlang>RTF<spanstyle>（<spanlang>MS-Word<spanstyle>）、<spanlang>Postscript<spanstyle>、超链接<spanlang>PDF<spanstyle>、压缩<spanlang>HTML<spanstyle>和<spanlang>UNIXman<spanstyle>页面格式的输出。文档是从源文件中直接提取的，从而十分容易保持文档和源码的一致。<p></p><pclass><spanlang>2.<spanstyle>     <spanstyle>可配置<spanlang>doxygen<spanstyle>，用以从没有标注文档的源文件中提取代码结构。这对于要在大量源文件中快速地找到所需的东西来说是非常有用的。通过<spanlang>include<spanstyle>依赖图、继承图和协作图等手段（它们都是自动生成的），可以使不同成分之间的关系可视化。<p></p><pclass><spanlang>3.<spanstyle>     <spanstyle>你甚至还可以“滥用”<spanlang>doxygen<spanstyle>，创建普通文档。”<p></p><pclass><b><spanstyle>二、<spanlang>doxygen<spanstyle>注释风格</spanstyle></spanlang></spanstyle></b><p></p><pclass><spanstyle>使用<spanlang>doxygen<spanstyle>的第一步是在你的代码中插入<spanlang>doxygen<spanstyle>风格的注释。你可以使用两种不同风格的<spanlang>doxygen<spanstyle>注释：<p></p><ultype><liclass><spanlang>Qt<spanstyle>风格，专用文档块看起来是这样的：<spanlang><br />/*!<br />...text...<br />*/<br /><br /><spanstyle>还有单行版本：<spanlang><br />file://!...onelineoftext...<liclass><spanlang>JavaDoc<spanstyle>风格，专用文档块看起来是这样的：<spanlang><br />/**<br /> *...text...<br /> */<br /><br /><spanstyle>还有单行版本：<spanlang><br />///...onelineoftext...<ul></ul><pclass><spanstyle>从现在起我将在例子中使用<spanlang>Qt<spanstyle>风格，但是你可以在你的代码中使用任何一种。<p></p><pclass><spanstyle>你可以通过许多方式使用<spanlang>doxygen<spanstyle>注释，以为你的代码编写文档。但下面的一种，我们感觉能够令人满意地工作。注意下面的注解仅仅说明应该如何使用<spanlang>doxygen<spanstyle>注释；你所应该包含在注释里的信息是另外一回事，并不在这里进行讨论。<p></p><pclass><spanstyle>我们的基本想法是你想要为每个类、以及该类的重要成员函数增加短注释和长注释。短注释应给出类或函数的基本信息的简要描述。而较长的注释，不奇怪，应该给出更长和更完整的描述。类的短注释和长注释，以及成员函数的简短描述，将放在头文件中。成员函数的长注释将出现在成员函数的实现出现的地方。<p></p><pclass><spanstyle>下面的例子演示这一注释系统（向<spanlang>Alexandre<spanstyle>、<spanlang>Regis<spanstyle>和<spanlang>Jose<spanstyle>道歉，我在此过程中“黑”了他们的代码）。假定我们正在为一种叫作<spanlang>CalPack<spanstyle>的<spanlang>CMT<spanstyle>包工作，它有一个单独的类<spanlang>CsICluster<spanstyle>，头文件叫作<spanlang>CsICluster.h<spanstyle>，在<spanlang>CalPack/<spanstyle>目录中；而实现文件叫作<spanlang>CsICluster.cpp<spanstyle>，在<spanlang>src/<spanstyle>目录中。文件<spanlang>CalPack/CsICluster.h<spanstyle>是这样的：<p></p><pclass><spanlang><imgborder doxygen="" www.flyingdonkey.com="" articles="" image="" header.jpg?=""><spanstyle>而文件<spanlang>src/CsICluster.cpp<spanstyle>是这样的：<p></p><pclass><spanlang><imgborder doxygen="" www.flyingdonkey.com="" articles="" image="" implementation.jpg?=""><spanstyle>注意，你可能会选择省略那些含义清楚的成员函数的较长注释，这并不会导致任何问题。访问<spanlang><ahref font-family:楷体_gb2312"="">文档。<p></p><pclass><b><spanstyle>三、使用<spanlang>mainpage.h<spanstyle>文件</spanstyle></spanlang></spanstyle></b><p></p><pclass><spanstyle>浏览上面的链接中的文档，你可能会注意到名为“<spanlang>MainPage<spanstyle>”的链接（它指向<spanlang>index.html<spanstyle>）并不是十分有趣。这是一个特殊的页面，在这里你可以添加与你的<spanlang>doxygen<spanstyle>页面描述的所有类有关的文档。在我们的例子中只有一个单独的类，但是你可以使用<spanlang>doxygen<spanstyle>来处理如你所选择的那么多的类。一种自然的划分是为每一个<spanlang>GLASTCMT<spanstyle>包都创建<spanlang>doxygen<spanstyle>页面。于是合乎想像地，我们想要这个主页面成为对正在被讨论的包的描述；在我们的个案中就是<spanlang>CalPack<spanstyle>包。<p></p><pclass><spanstyle>那么我们怎么为此主页面增添内容呢？你需要使用<spanlang>doxygen<spanstyle>的特殊命令<spanlang>\mainpage<spanstyle>。在<spanlang>doxygen<spanstyle>中有一些特殊命令，它们放在<spanlang>doxygen<spanstyle>注释中以增强你所生成的文档。例如在类描述中，我们已经使用了<spanlang>doxygen<spanstyle>特殊命令<spanlang>\author<spanstyle>。<p></p><pclass><spanstyle>命令<spanlang>\mainpage<spanstyle>指定用以填充主页面的注释的内容。<spanlang>doxygen<spanstyle>允许你将此命令放在任何注释中。<b>但是，</b><b><spanlang>GLAST<spanstyle>的惯例是将该命令放入文件<spanlang>mainpage.h<spanstyle>中。这个<spanlang>mainpage.h<spanstyle>文件应该只包含一条使用<spanlang>\mainpage<spanstyle>命令的注释。并且这个文件应该放在头文件目录中，也就是，与包自己的名字相同的目录。</spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></b><p></p><pclass><spanstyle>于是我们为<spanlang>CalPack<spanstyle>包创建一个<spanlang>CalPack/mainpage.h<spanstyle>文件：<p></p><pclass><spanlang><imgborder doxygen="" www.flyingdonkey.com="" articles="" image="" mainpage.jpg?=""><spanstyle>注意在<spanlang>\mainpage<spanstyle>命令后面的字句是主页面的标题。我们还引入了<spanlang>\section<spanstyle>命令，其语法你应该可以推论得出。上面的注释所产生的<spanlang>HTML<spanstyle>输出见<spanlang><ahref font-family:楷体_gb2312"="">类的文档。<p></p><pclass><b><spanstyle>四、包含图像</spanstyle></b><p></p><pclass><spanstyle>另一个有趣的命令（对此我们希望实施某种标准）是<spanlang>\image<spanstyle>命令。此命令用于在你的文档中插入图像。<spanlang>\image<spanstyle>命令可以用在任何注释中。此命令的语法如下所示：<p></p><pclass><spanlang>\imagehtmlmypicture.gif<p></p><pclass><spanstyle>尽管我们仅仅显示了<spanlang>HTML<spanstyle>输出，<spanlang>doxygen<spanstyle>还可以用于创建<spanlang>latex<spanstyle>、<spanlang>man<spanstyle>或<spanlang>rtf<spanstyle>文档。但是，并非所有格式都支持所有的图像类型。因而，有必要指定你所希望在其中包含的图像的输出格式。<spanlang>doxygen<spanstyle>将在你通过叫作<spanlang>IMAGE_PATH<spanstyle>的变量所指定的目录中查找图像文件。对此变量的设置以及其他的<spanlang>doxygen<spanstyle>缺省值将在下面的“运行<spanlang>doxygen<spanstyle>”中解释。<b>目前，只需注意</b><b><spanlang>GLAST<spanstyle>的惯例是在你的文档中为给定的包所使用的全部图像文件都将放在叫作<spanlang>doc/images/<spanstyle>的目录中。</spanstyle></spanlang></spanstyle></spanlang></b><p></p><pclass><spanstyle>于是假设有一个叫作<spanlang>figuresim2.gif<spanstyle>的图像文件在目录<spanlang>doc/images/<spanstyle>中，我们想要将其插入我们的主页面，我们可以通过简单的改动来完成：<p></p><pclass><spanlang><imgborder doxygen="" www.flyingdonkey.com="" articles="" image="" mainpage2.jpg?=""><spanstyle>所产生的<spanlang>HTML<spanstyle>输出见<spanlang><ahref word-break:break-all"=""><b><spanstyle>五、运行<spanlang>doxygen</spanlang></spanstyle></b><p></p><pclass><spanstyle>你可以通过两种方式来运行<spanlang>doxygen<spanstyle>。注意两种方法都需要你将<spanlang>doxygen<spanstyle>安装在你的访问路径上。请访问<spanlang>doxygen<spanstyle>的主页以获得下载和设置可执行程序的相关信息。<p></p><pclass><spanlang>1)<spanstyle>      <spanstyle>对于<spanlang>vcmt<spanstyle>用户，你可以简单地点击<spanlang>doxygen<spanstyle>区域中的“<spanlang>create<spanstyle>”按钮，从而为你选择的所有包创建<spanlang>HTML<spanstyle>文档。然后点击“<spanlang>examine<spanstyle>”来查看页面。<p></p><pclass><spanlang>2)<spanstyle>    <spanstyle>对于非<spanlang>vcmt<spanstyle>用户，你首先需要创建一个<spanlang>Doxyfile<spanstyle>。<spanlang>Doxyfile<spanstyle>允许你设置运行<spanlang>doxygen<spanstyle>所需的所有设置和路径。要创建<spanlang>Doxyfile<spanstyle>，执行<spanlang><br /><br />doxygen–g&lt;filename&gt;<br /><br /><spanstyle>“<spanlang>filename<spanstyle>”指定含有<spanlang>doxygen<spanstyle>设置的文件的名字；如果不指定名字，该文件就叫作“<spanlang>Doxyfile<spanstyle>”。使用<spanlang>Doxyfile<spanstyle>时你可能想要设置一些参数。我将提及三个有趣的参数，其他的请参考<spanlang>doxygen<spanstyle>主页。<spanlang><br /><br /><spanstyle>●<spanlang>INPUT<spanstyle>：此参数指定<spanlang>doxygen<spanstyle>在其中搜索源码的目录。对于上面的例子，需要设置<spanlang><br /><br />  INPUT=srcCalPack<br /><br /><spanstyle>●<spanlang>FILE_PATTERNS<spanstyle>：此参数指定<spanlang>doxygen<spanstyle>所要解析的文件的类型。对于上面的例子，<spanlang><br />  <spanstyle>需要设置<spanlang><br /><br />  FILE_PATTERNS=*.cpp*.h<br /><br /><spanstyle>●<spanlang>IMAGE_PATH<spanstyle>：此参数指定<spanlang>doxygen<spanstyle>在哪里查找使用<spanlang>\image<spanstyle>命令包含的图像。对<spanlang><br />  <spanstyle>于上面的例子（并且作为<spanlang>GLAST<spanstyle>的惯例），需要设置<spanlang><br /><br />  INCLUDE_PATH=doc/images<p></p><pclass><spanstyle>一旦你设置了这些参数以及其他任何你想要改变的参数，你就可以运行<spanlang>doxygen<spanstyle>了。假定你的<spanlang>Doxyfile<spanstyle>就叫作“<spanlang>Doxyfile<spanstyle>”，执行<p></p><pclass><spanlang>doxygenDoxyfile<p></p><pclass><spanstyle>它将解析你指定的所有文件。缺省地，<spanlang>HTML<spanstyle>输出将被放在叫作<spanlang>html/<spanstyle>的目录中（这也可以在<spanlang>Doxyfile<spanstyle>中改变）。<p></p><pclass><spanstyle>译者注：<p></p><pclass><spanlang>1.<spanstyle>       doxygen<spanstyle>有内建的多语言支持，目前支持<spanlang>24<spanstyle>种语言，其中包括中文。具体用法请参考<spanlang>doxygen<spanstyle>的参考手册。<p></p><pclass><spanlang>2.<spanstyle>     GLAST<spanstyle>是<spanlang>TheGammaRayLargeAreaSpaceTelescope<spanstyle>（伽玛射线大区域空间望远镜）的缩写。主页在<spanlang><ahref font-family:楷体_gb2312"="">访问其源码。</ahref></spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT:7PT'TIMESNEWROMAN'"&gt;</spanstyle></spanlang></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="MARGIN-LEFT:18PT;TEXT-INDENT:-18PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></pclass></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle></spanlang></spanstyle></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></pclass></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass></spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="MARGIN-LEFT:18PT;TEXT-INDENT:-18PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="MARGIN-LEFT:18PT;TEXT-INDENT:-18PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanstyle></spanlang></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanstyle></spanlang></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass></ahref></spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</imgborder></spanlang></pclass></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass></spanlang></pclass></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass></pclass></ahref></spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</imgborder></spanlang></pclass></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass></ahref></spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</imgborder></spanlang></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle>/PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</imgborder></spanlang></pclass></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></pclass></spanstyle></pclass></spanstyle></spanlang></spanstyle></spanlang></spanstyle></pclass></spanstyle></spanlang></spanstyle></pclass></spanlang></spanstyle></spanlang></spanstyle></spanlang></liclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/LICLASS=MSONORMALSTYLE="MARGIN-BOTTOM:12PT;TEXT-ALIGN:LEFT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></liclass></ultype></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass></spanstyle>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle>/PCLASS=MSONORMALSTYLE="MARGIN-LEFT:18PT;TEXT-INDENT:-18PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></pclass></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT:7PT'TIMESNEWROMAN'"&gt;</spanlang></spanstyle></spanstyle></spanlang></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT:7PT'TIMESNEWROMAN'"&gt;</spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanstyle></spanlang></pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</pclass>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanstyle></spanlang></spanstyle></spanlang></spanstyle></ahref></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></spanstyle></spanlang></pclass>/PALIGN=CENTERCLASS=MSONORMALSTYLE="TEXT-ALIGN:CENTER;TEXT-INDENT:42PT"&gt;</pclass></fontface></spanlang></palign></fontface></ahref>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle></ahref>/SPANSTYLE="FONT-FAMILY:楷体_GB2312"&gt;</spanlang></spanstyle><img src ="http://www.cppblog.com/tx7do/aggbug/10236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-19 22:18 <a href="http://www.cppblog.com/tx7do/archive/2006/07/19/10236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Docbook简介</title><link>http://www.cppblog.com/tx7do/archive/2006/07/14/9839.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 14 Jul 2006 03:00:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/14/9839.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/9839.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/14/9839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/9839.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/9839.html</trackback:ping><description><![CDATA[
		<p>编写技术文档，我想谁都遇到过。很多人都用MS Word，不可否认Word的功能确实非常强大，但是用Word有一些缺点无法避免：<br /><br />1) 写文档的时候，不得不兼顾文档的格式，这是件很头痛的事情，至少对我来说。经常是最后不得不Review好几遍，就是为了统一格式，即使使用模板也不能避免这个问题。<br /><br />2) 无法进行有效的版本控制，因为Word保存的是二进制格式，这就不能使用CVS的版本控制功能，只能手工合并，这样很容易出错。虽然Word现在也可以保存成XML，但是看一下保存的文件就会发现，格式和内容混杂在一起，简直没法看。况且，版本控制的时候，我们注重的往往是内容，现在却不得不处理大量的格式信息，至少我没兴趣把时间花在这个上面。<br /><br />3) 可移植性问题，毕竟Word只能运行在Windows平台上，即使可以保存为XML或者HTML，在其他平台上你又如何编辑和打印呢？<br /><br />4) 用盗版还是正版的问题，公司不得不考虑知识产权这个比较严肃的话题。</p>
		<p>讲到这里，很多人可能会自然而然的想到XML+XSLT+开源代码。Docbook正是基于XSLT把内容和形式分开的思想开发的，它可以解决上述的所有问题。</p>
		<p>那么到底什么是Docbook？<br /><br />Docbook是一些标准和工具的集合。标准包括XML、DTD、XSL、XSL-FO和Docbook DTD（Docbook的核心），工具则包括XSLT Processor和XSL-FO Processor。这些标准和工具组成基于Docbook的发布系统。<br /><br />Docbook原本是为了编写和发布技术文档而开发的，O'Reily是发起者之一，但实际上它也可以用于其他类型的文档，因为它所定义的结构符合大部分现代书籍的格式。</p>
		<p>Docbook的核心是Docbook DTD，这个标准是由OASIS的<a href="http://www.oasis-open.org/docbook/">Docbook小组</a>维护的。这个标准对文档的结构进行了详细的定义，譬如书（book元素）可以包含一个标题（title），若干的段落（para）和若干的章节（chapter），等等。这些都符合常规书籍的出版格式。</p>
		<p>使用Docbook编写文档，实际上就是根据Docbook DTD编辑XML文件的过程。所有的内容都用标签封装起来，Docbook提供了十分详尽的定义，几乎任何内容都可以根据其用途找到对应的标签。在编辑文档的过程中，作者只需要关心内容，根本不会涉及到排版的问题。</p>
		<p>要发布Docbook文档，必须使用XSLT。专为Docbook使用的XSLT不属于Docbook的核心，任何人都可以编写自己的XSLT。当然，你不用真的自己写（除非你有兴趣），已经有人做了这方面的工作，你可以在<a href="http://sourceforge.net/projects/docbook/">SourceForge</a>找到Norman Walsh开发的Docbook样式单，写这篇文章的时候，最新版本是1.67.2。</p>
		<p>如果最终发布Docbook文档，自然需要用到XSLT Processor和XSL-FO Processor这类的工具，可供选择开源工具很多，像xsltproc、Xalan、FOP和PassiveTeX等等。这些工具实际上也是与Docbook无关的。因此不用浪费时间在网上找Docbook的专门工具，只要找到按标准实现的工具，就可以用来发布Docbook文档。<br /><br />总的来说，Docbook的发布流程是这样的：<br /><br />1) 编写XML文档；<br /><br />2) 使用XSLT Processor把XML文档转换成HTML文档，或者XSL-FO文档；<br /><br />3) 使用XSL-FO Processor将XSL-FO文档转换为PDF或者PS文件。</p>
		<p>因此，Docbook有下列优点：<br /><br />1) 内容与格式分离；<br /><br />2) 内容高度结构化；<br /><br />3) 平台无关；<br /><br />4) 发布过程可以自动化；<br /><br />5) 易于版本控制；<br /><br />6) 可以生成多种形式的文档。</p>
		<p>Docbook的缺点就是非WYSIWYG，编辑的时候不如Word那么直观，直接编辑XML文件还是一件比较烦琐的事情。但是这个问题并不严重，使用专门的XML编辑器就可以让工作轻松很多，譬如Emacs就支持Docbook文档的编辑。至于效果，使用工具生成最终文档是非常快的。相对于它的优点而言，这点缺点又算的了什么呢。<br /><br />参考资料：<br /><a href="http://www.docbook.org/xml/4.2/index.html">Docbook</a><br /><br /><a href="http://nwalsh.com/docbook/procdiagram/index.html">Docbook Publishing Model</a><br /><br /><a id="_1293a14ffd923cb1_HomePageDays_DaysList__ctl1_DayItem_DayList__ctl0_TitleUrl" href="http://blog.csdn.net/mickeyrat/archive/2005/02/06/283471.aspx">安装配置Docbook工具</a><br /><br /><a id="_1293a14ffd923cb1_HomePageDays_DaysList__ctl0_DayItem_DayList__ctl0_TitleUrl" href="http://blog.csdn.net/mickeyrat/archive/2005/02/08/284270.aspx"><font color="#000080">制作Docbook文档</font></a><br /></p>
<img src ="http://www.cppblog.com/tx7do/aggbug/9839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-14 11:00 <a href="http://www.cppblog.com/tx7do/archive/2006/07/14/9839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Docbook写作指南 </title><link>http://www.cppblog.com/tx7do/archive/2006/07/14/9838.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 14 Jul 2006 02:58:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/14/9838.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/9838.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/14/9838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/9838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/9838.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 13px">全文请看这个link：<a href="http://ithelper.cn/articles/Linux_DocBook_Guide.html" target="_blank"><font color="#000000">DocBook指南</font></a><br /><br />1. 概述<br /><br />DocBook提供了一个使用SGML/XML撰写结构化文档的系统。这个系统非常适合于计算机类的文章、书籍、论文等的出版，当然并不仅仅限于计算机类。DocBook已经被Linux、FreeBSD等众多的项目制定作为文档撰写格式，并且有越来越多的组织和个人开始使用。<br /><br />本文只是一个简要指南。收集了一些DocBook的学习资料，和我自己的一些心得。<br /><br />如果想快速了解DocBook，可以看这里：DocBook的HelloWorld起步。<br />2. DocBook语法<br /><br />学习DocBook，基本的语法是一定要掌握的，即便你使用所见即所得编辑器。下面是学习DocBook语法的一些资源：<br /><br />    *<br /><br />      Writing Documentation Using DocBook<br /><br />      一个非常好的英文Docbook语法教程。也可以作为常备的速查手册。<br /><br />    *<br /><br />      DocBook 助你完成传世之作<br /><br />      中文的教程。入门必看。有助于了解DocBook的全貌。<br />    *<br /><br />      DocBook学习<br /><br />      中文语法教程。也提到了DocBook格式转换的内容，特别是XSLT部分，是比较好的中文资料。<br /><br />3. DocBook编辑器<br /><br />DocBook可以用任何文本编辑器来编辑。但是为了提高生产力，我们可以使用一些更方便的工具。<br /><br />    *<br /><br />      DocBookAuthoringTools<br /><br />      这是一个DocBook书写工具的列表。比较全面。<br /><br />但上述列表还并不能大全。至少还遗漏了Kate，Quanta Plus和OpenOffice（当然还有其他一些形形色色的XML编辑器）。前面两个都是KDE的项目，只能在KDE环境下运行。OpenOffice编辑DocBook我还没有用过。<br /><br />    *<br /><br />      Kate编辑DocBook XML文档<br /><br />      这是我2002年翻译的一篇文章。<br />    *<br /><br />      Quanta as a Docbook Editor<br /><br />      Quanta Plus是一个不错的Html/XML编辑器，用来编辑DocBook也非常好。<br /><br />我推荐的编辑器：<br /><br />    *<br /><br />      XMLMind XML Editor<br /><br />      这是我现在用的DocBook编辑器。所见即所得方式。基于Java，标准版免费，可以跨平台使用。不过我是在Linux环境用。<br /><br />      我用过不少的DocBook编辑器，这是我看见过最好用的。<br />    *<br /><br />      Quanta Plus<br /><br />      非所见即所得方式。基于KDE。<br /><br />4. 转换DocBook<br /><br />DocBook格式的文件可以转换成很多文件格式来发布。比如：Html,Rtf,Pdf,甚至Word。<br /><br />在 DocBook学习 和 DocBook助你完成传世之作 两篇文章中，介绍了 OpenJade和Saxon两种转换工具和它们的使用方法。<br /><br />按照我很早以前的印象，使用OpenJade将DocBook转换成RTF和Html，中文是正常的。使用其他工具，基本上多少会遇到一点中文方面的麻烦。<br /><br />如果你使用XMLMind XML Editor标准版，那么在DocBook菜单下面已经内置了转换成Html的工具（标准版不能将DocBook转换成其他格式）。不过XMLMind转换出来的html文件编码都是iso-8859-1的。<br /><br />另外，你还可以关注一下在Windows下使用的Chinese DocBook Environment（CDBE） 。<br /><br />下面介绍我自己使用的转换方法。环境是Ubuntu Linux。<br /><br />4.1. DocBook-&gt;Html<br /><br />4.1.1. 环境准备<br /><br />    *<br /><br />      安装xsltproc<br /><br />    *<br /><br />      安装docbook-xsl<br /><br />    *<br /><br />      建立合适的xsl<br /><br />      找到我们刚才安装的docbook-xsl中的docbook.xsl，把它copy成docbook_utf8.xsl(因为我的系统语言设定是utf<img src="http://bbs.chinaunix.net/images/smilies/icon_cool.gif" align="absMiddle" border="0" />。<br /><br />cp /path/html/docbook.xsl /path/html/docbook_utf8.xsl<br /><br />      编辑这个docbook_utf8.xsl，找到：<br /><br />&lt;xsl: output method="html"<br />            encoding="ISO-8859-1"<br />            indent="no"/&gt;<br /><br />      替换为：<br /><br />&lt;xsl: output method="html"<br />            encoding="utf8"<br />            indent="yes"/&gt;<br /><br />      在这段话之后，我们添加：<br /><br />&lt;xsl: param name="html.stylesheet" select="'style.css'"&gt;&lt;/xsl:param&gt;<br />&lt;xsl: param name="table.borders.with.css" select="1"&gt;&lt;/xsl:param&gt;<br />&lt;xsl: param name="l10n.gentext.language" select="'zh_cn'"&gt;&lt;/xsl:param&gt;<br />&lt;xsl: param name="admon.graphics" select="1"&gt;&lt;/xsl:param&gt;<br />&lt;xsl: param name="section.autolabel" select="1"&gt;&lt;/xsl:param&gt;<br />&lt;xsl: param name="section.label.includes.component.label" select="1"&gt;&lt;/xsl:param&gt;<br />&lt;xsl: param name="ulink.target" select="'_blank'"&gt;&lt;/xsl:param&gt;<br /><br />      这些是样式表参数，它的具体意义请参考HTML Parameter Reference，这是DocBook Xsl文档的一部分。<br />    *<br /><br />      建立转换脚本<br /><br />      创建新文件/usr/bin/docbook2html,内容如下：<br /><br />#/bin/sh<br />xsltproc /path/html/docbook_utf8.xsl $*<br /><br />      将其设置为可执行文件。<br /><br />4.1.2. 转换步骤<br /><br />docbook2html YourDocBook.xml&gt;YourDocBook.html<br /><br />这样，我们就得到了html结果。<br /><br />这个Html可以使用同级目录下的style.css来美化输出。<br /><br />你可以去网上找那些docbook转化出来的html（根据docbook的风格是很容易识别的），然后把它们使用的css下载下来使用就可以了。<br /><br />比如：<br /><br />    *<br /><br />      <a href="http://www.sagehill.net/docbookxsl/" target="_blank"><font color="#000000">http://www.sagehill.net/docbookxsl/</font></a><br />    *<br /><br />      <a href="http://worldhello.net/doc/docbook_howto/index.html" target="_blank"><font color="#000000">http://worldhello.net/doc/docbook_howto/index.html</font></a><br />    *<br /><br />      <a href="http://pyrecord.freezope.org/docbook/index.html" target="_blank"><font color="#000000">http://pyrecord.freezope.org/docbook/index.html</font></a><br /><br />我使用的是XMLMind XML Editor转换出来的html所带的css。<br /></span>
<img src ="http://www.cppblog.com/tx7do/aggbug/9838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-14 10:58 <a href="http://www.cppblog.com/tx7do/archive/2006/07/14/9838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CVS For Linux</title><link>http://www.cppblog.com/tx7do/archive/2006/06/21/8796.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 21 Jun 2006 13:41:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/06/21/8796.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/8796.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/06/21/8796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/8796.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/8796.html</trackback:ping><description><![CDATA[
		<strong>
				<div>
						<font face="Geneva, Arial, Sans-serif">暂时写这里防止以后找不到。</font>
				</div>
				<ol>
						<li>
								<font face="Geneva, Arial, Sans-serif">确认是否安装了cvs。<br />[root@MajorStudio home] #rpm -qa|grep cvs</font>
						</li>
						<li>
								<font face="Geneva, Arial, Sans-serif">未安装则安装，需要从</font>
								<a href="http://www.cvshome.org/">
										<font face="Geneva, Arial, Sans-serif" color="#b33e07">http://www.cvshome.org</font>
								</a>
								<font face="Geneva, Arial, Sans-serif">下载,例如 cvs-1.11.1p1.tar.gz。<br />存放路径为 /root/cvs_install/<br />[root@MajorStudio cvs_install] #tar zxvf cvs-1.11.1p1.tar.gz<br />解压后查询<br />[root@MajorStudio cvs_install] #ls -a  /root/cvs_install/<br />.  ..  cvs-1.11.1p1   cvs-1.11.1p1.tar.gz<br />之后进入 cvs-1.11.1p1 目录，安装.<br />[root@MajorStudio cvs-1.11.1p1] # ./configure<br />[root@MajorStudio cvs-1.11.1p1] # make<br />[root@MajorStudio cvs-1.11.1p1] # make install<br /><br />Windows环境下略.</font>
						</li>
						<li>
								<font face="Geneva, Arial, Sans-serif">选定cvs资源库。<br />[root@MajorStudio cvs] # mkdir /cvs<br />[root@MajorStudio cvs] # mkdir /cvs/repository<br />为项目创建一个项目目录<br /></font>
								<font face="Arial">[root@MajorStudio cvs] # mkdir /cvs/repository/project</font>
						</li>
						<li>
								<font face="Geneva, Arial, Sans-serif">初始化 CVS 服务器<br />[root@MajorStudio root] # cvs -d  /cvs/repository/  init<br />此时应该创建了CVSROOT目录。</font>
						</li>
						<li>
								<font face="Arial">CVS 服务器权限设定<br />资源库建立完成，需要为CVS创建组和用户，并设定他们的权限。实际工作中CVS服务器分为管理小组和用户小组。这里设定两个用户组：cvsmanager和cvsuser。</font>
								<ol>
										<li>
												<font face="Arial">创建cvsmanager组<br />[root@MajorStudio root] # groupadd cvsmanager</font>
										</li>
										<li>
												<font face="Arial">创建管理员账号<br />[root@MajorStudio root] # adduser -g cvsmanager cvsadm -p cvsadmabc<br />[root@MajorStudio root] # passwd cvsadm</font>
										</li>
										<li>
												<font face="Arial">创建使用小组 cvsuser<br />[root@MajorStudio root] # groupadd cvsuser</font>
										</li>
										<li>
												<font face="Arial">创建用户账号<br />[root@MajorStudio root] # adduser -g cvsuser cvsadm -p cvsusera<br />[root@MajorStudio root] # passwd cvsusera<br />[root@MajorStudio root] # adduser -g cvsuser cvsadm -p cvsuserb<br />[root@MajorStudio root] # passwd cvsuserb<br />[root@MajorStudio root] # adduser -g cvsuser cvsadm -p cvsuserc<br />[root@MajorStudio root] # passwd cvsuserc</font>
										</li>
										<li>
												<font face="Arial">配置 CVSROOT 目录的设定权限。<br />[root@MajorStudio cvs] # chmod 777 /cvs/repository/<br /></font>
												<font face="Arial">[root@MajorStudio repository] # chgrp -R cvsmanager /cvs/repository/CVSROOT<br />[root@MajorStudio repository] # chmod -R 075 /cvs/repository/CVSROOT</font>
										</li>
										<li>
												<font face="Arial">为使用小组追加对history写的权利<br />[root@MajorStudio repository] # chmod 077 /cvs/repository/CVSROOT/history</font>
										</li>
										<li>
												<font face="Arial">修改 工程目录 的权限<br />[root@MajorStudio CVSROOT] #  chgrp -R cvsuser /cvs/repository/project<br />[root@MajorStudio CVSROOT] # chmod 770 /cvs/repository/project</font>
										</li>
								</ol>
						</li>
						<li>
								<font face="Arial">设置CVS口令服务器。修改/etc/xinetd.conf<br />[root@MajorStudio root] # vi /etc/xinetd.conf<br />写入<br />service cvspserver<br />{<br />     prot  =  2401<br />     socket_type = sream<br />     wait   = no<br />     user  = root<br />     server = cvs 可执行路径<br />     server_args = -f  --allow -root =cvs资源库目录 pserver<br />     log_on_failusre += USERID<br />    bind  =  IP地址</font>
								<font face="Arial">
										<br />}<br />可执行路径查询可以使用如下语句。<br />[root@MajorStudio bin] # whereis cvs<br /></font>
								<font face="Arial">cvs: /usr/local/bin/cvs<br />修改/etc/services文件:<br />vi  /etc/services<br />添加如下内容<br /></font>
								<font face="Arial">cvspserver   2401/tcp</font>
						</li>
						<li>
								<font face="Arial">启动服务器<br />/etc/rc.d/init.d/xinetd restart</font>
						</li>
						<li>
								<font face="Arial">查看运转情况<br />netstat -lnp | grep 2401<br />显示：<br />tcp  0  0   0.0.0.0:2401  0.0.0.0：* LISTEN   9830/xinetd<br /></font>
						</li>
				</ol>
				<font face="Arial">
						<p>
								<font face="Arial">完成。</font>
								<br />
						</p>
				</font>
		</strong>
<img src ="http://www.cppblog.com/tx7do/aggbug/8796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-06-21 21:41 <a href="http://www.cppblog.com/tx7do/archive/2006/06/21/8796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fedora4中的MySQL问题</title><link>http://www.cppblog.com/tx7do/archive/2006/06/21/8791.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 21 Jun 2006 09:38:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/06/21/8791.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/8791.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/06/21/8791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/8791.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/8791.html</trackback:ping><description><![CDATA[
		<div>起因：很少碰Linux，一直都是玩的FreeBSD，忽然之间不习惯了，我喜欢PORT，不喜欢RPM这个东西！<br /><br />FC4中自带了4.1.11的Mysql，我想装4.0.25,但总是出错.请问如果才能彻底删除自带的Mysql，安装时我并没选Mysql，它还是装上去了.谢谢各位了.<br /><br /><br /><div id="post_message_1237987" style="OVERFLOW-X: hidden">先要停掉MySQL服务：mysqladmin -u root shutdown<br />然后安装新的MySQL，安装完后把原来的mysql删掉，把mysql指向新安装的版本上就可以了<br />(失败！)<br /><br />#pkill mysqld <br />#rpm -qa |grep mysql<br />（一目了然了！）<br /><br />冲突；<br />把 mysql-4.1.11-2.i386 卸掉<br />#rpm -e mysql-4.1.11-2.i386<br />（举一反三，把其他的包也如此卸载掉！）<br /><br />看来得解决依赖关系。。。。<br /><br />如果想卸掉只是加一个参数就好了。<br /><br />#rpm -e mysql-4.1.11-2.i386 --nodeps <br /><br />不建议这么做，兄弟应该用 apt+synaptic 来升级，自动解决依赖；<br /><br />#rpm -vih MySQL-server-4.0.25-0.i386.rpm<br /><br /><!-- / message --><!-- sig --></div><!-- / message --><!-- / message --></div>
<img src ="http://www.cppblog.com/tx7do/aggbug/8791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-06-21 17:38 <a href="http://www.cppblog.com/tx7do/archive/2006/06/21/8791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>_IID_IDirect3DTexture9的error link</title><link>http://www.cppblog.com/tx7do/archive/2006/06/19/8704.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 19 Jun 2006 05:46:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/06/19/8704.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/8704.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/06/19/8704.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/8704.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/8704.html</trackback:ping><description><![CDATA[
		<p>以前每次用別人函式庫常常都ErrorLink 還好現在都能順利的解決<br />來紀錄一下這個最近找了還蠻久的錯誤 _IID_IDirect3DTexture9 解決方法 </p>
		<p>error LNK2001: unresolved external symbol _IID_IDirect3DTexture9</p>
		<p> 加上dxguid.lib到Linker的input </p>
<img src ="http://www.cppblog.com/tx7do/aggbug/8704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-06-19 13:46 <a href="http://www.cppblog.com/tx7do/archive/2006/06/19/8704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>抛弃#pragma once</title><link>http://www.cppblog.com/tx7do/archive/2006/06/19/8703.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 19 Jun 2006 05:32:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/06/19/8703.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/8703.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/06/19/8703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/8703.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/8703.html</trackback:ping><description><![CDATA[VS的自作聪明的小东西。<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 once</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: #000000">#ifndef _MY_H<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> _MY_H</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#endif</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">#if</span><span style="COLOR: #000000"> !defined(BASICDD_H)</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> BASICDD_H</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#endif</span></div>都要比VS那个小东西要好。<img src ="http://www.cppblog.com/tx7do/aggbug/8703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-06-19 13:32 <a href="http://www.cppblog.com/tx7do/archive/2006/06/19/8703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于String 转换到 unsigned short</title><link>http://www.cppblog.com/tx7do/archive/2006/04/29/6460.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 29 Apr 2006 09:33:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/04/29/6460.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/6460.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/04/29/6460.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/6460.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/6460.html</trackback:ping><description><![CDATA[最近被一个小问题给弄晕呼了，没有办法人太笨了，基础又不好……<br /><br />我最近要把一个String的数值转换为 unsigned short int类型，Socket里面的sockaddr_in的sin_port使的就这。<br /><br />开始尝试了使用标准库istringstream和ostringstream来解决，也就是：<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"> std::istringstream  str(strPort); <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /> unsigned </span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000"> nPort;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /> str</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">strPort; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /> str</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">nPort; </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">nPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)strPort.c_str();</span></div>转换到 char*，我就类似的使用了：<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">nPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (unsigned </span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">)strPort.c_str();</span></div>结果数值还是错误的！<br /><br />后来我查了一下CPPReference：<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">c_str <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />Syntax: <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  #include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> c_str();<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" />The function c_str() returns a </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> pointer to a regular C </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">, identical to the current </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">. The returned </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">terminated.<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" />Note that since the returned pointer </span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000"> of type (C</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000"> Keywords) </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">, the character data that c_str() returns cannot be modified.<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div>原文地址：<a href="http://www.cppreference.com/cppstring/c_str.html">http://www.cppreference.com/cppstring/c_str.html</a><br /><br />这才知道，原来c_str 只能够返回const char*，<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: #000000">    nPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> atoi((</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)strPort.c_str()); </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">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">#include &lt;sstream.h&gt;</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">#include &lt;winsock2.h&gt;</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> test()<br /><img id="Codehighlighter1_121_529_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_529_Open_Text.style.display='none'; Codehighlighter1_121_529_Closed_Image.style.display='inline'; Codehighlighter1_121_529_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_121_529_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_121_529_Closed_Text.style.display='none'; Codehighlighter1_121_529_Open_Image.style.display='inline'; Codehighlighter1_121_529_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_121_529_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_121_529_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ostringstream oss;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">oss.str("abc");</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> strIP </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">127.0.0.1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> strPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2000</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> szRemoteAddr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    unsigned </span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000"> nPort ;<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" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />szRemoteAddr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)strIP.c_str();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">nPort = atoi((char*)strPort.c_str());</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">nPort </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> atoi((</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)strPort.c_str());<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" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;strIP&lt;&lt;endl;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;szRemoteAddr&lt;&lt;endl;</span><span style="COLOR: #008000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is old one:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> strPort </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> endl;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is new one:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> nPort </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> endl;<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" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br /><img id="Codehighlighter1_565_586_Open_Image" onclick="this.style.display='none'; Codehighlighter1_565_586_Open_Text.style.display='none'; Codehighlighter1_565_586_Closed_Image.style.display='inline'; Codehighlighter1_565_586_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_565_586_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_565_586_Closed_Text.style.display='none'; Codehighlighter1_565_586_Open_Image.style.display='inline'; Codehighlighter1_565_586_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_565_586_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_565_586_Open_Text"><span style="COLOR: #000000">{ <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />test();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>最后验证出来是正确的！<br />郁闷啊，这样一个小问题都把我搞得要死，唉……<img src ="http://www.cppblog.com/tx7do/aggbug/6460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-04-29 17:33 <a href="http://www.cppblog.com/tx7do/archive/2006/04/29/6460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>表达式计算器错误 CXX0017 </title><link>http://www.cppblog.com/tx7do/archive/2006/04/29/6453.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 29 Apr 2006 06:34:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/04/29/6453.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/6453.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/04/29/6453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/6453.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/6453.html</trackback:ping><description><![CDATA[
		<div class="section" id="errorTitleSection">
				<h4 class="subHeading">错误消息 </h4>未找到符号<br /><p></p></div>
		<p>无法找到表达式中指定的符号。</p>
		<p>该错误可能的原因之一是符号名中大小写不匹配。因为 C 和 C++ 都是区分大小写的语言，所以必须完全按照源中定义的符号名大小写给定符号名。</p>
		<p>试图在调试期间为了监视变量而转换此变量的类型时可发生该错误。<b>typedef</b> 声明类型的新名称，但不定义新类型。在调试器中试图进行的类型转换需要已定义类型名。</p>
		<p>该错误与 CAN0017 相同。</p>
		<h1 class="heading">通过使用下面可能的解决方案进行修复</h1>
		<div class="section" id="procedureSection0">
				<ol>
						<li>
								<content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
										<p xmlns="">确保已在程序中将要使用该符号的地方声明了该符号。</p>
								</content>
						</li>
						<li>
								<content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
										<p xmlns="">使用实际类型名而不是 <b>typedef</b> 定义的名称来转换调试器中的变量类型。</p>
								</content>
						</li>
				</ol>
		</div>
<img src ="http://www.cppblog.com/tx7do/aggbug/6453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-04-29 14:34 <a href="http://www.cppblog.com/tx7do/archive/2006/04/29/6453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c/c++中指针学习的两个绝好例子</title><link>http://www.cppblog.com/tx7do/archive/2006/04/24/6183.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 24 Apr 2006 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/04/24/6183.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/6183.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/04/24/6183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/6183.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/6183.html</trackback:ping><description><![CDATA[
		<p>　　对于众多人提出的c/c++中指针难学的问题做个总结： <br /><br />　　指针学习不好关键是概念不清造成的，说的简单点就是书没有认真看，指针的学习犹如人在学习饶口令不多看多学多练是不行的，下面是两个很经典的例子，很多书上都有,对于学习的重点在于理解*x和x的理解，他们并不相同，*x所表示的其实就是变量a本身，x表示的是变量a在内存中的地址，如果想明白可以输出观察cout&lt;&lt;*x"|"x;，当定义了int *x;后对x=&amp;a的理解的问题。仔细阅读和联系下面的两个例子我想指针问题就不是难点了！</p>
		<p> </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 </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">stdio.h</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />main()  <br /><img id="Codehighlighter1_33_590_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_590_Open_Text.style.display='none'; Codehighlighter1_33_590_Closed_Image.style.display='inline'; Codehighlighter1_33_590_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_33_590_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_33_590_Closed_Text.style.display='none'; Codehighlighter1_33_590_Open_Image.style.display='inline'; Codehighlighter1_33_590_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_33_590_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_33_590_Open_Text">
						<span style="COLOR: #000000">{  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> a,b; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 定义a,b两个整形变量用于输入两个整数  </span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">point_1,</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">point_2,</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">temp_point; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 定义三个指针变量  </span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">scanf(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">%d,%d</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">a,</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">b); </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 格式化输入a,b的值 */ </span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">point_1</span>
						<span style="COLOR: #000000">=&amp;</span>
						<span style="COLOR: #000000">a; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 把指针变量point_1的值指向变量a的地址 */ </span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">point_2</span>
						<span style="COLOR: #000000">=&amp;</span>
						<span style="COLOR: #000000">b; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 把指针变量point_2的值指向变量b的地址 */ </span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000"> (a</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">b)  <br /><img id="Codehighlighter1_255_502_Open_Image" onclick="this.style.display='none'; Codehighlighter1_255_502_Open_Text.style.display='none'; Codehighlighter1_255_502_Closed_Image.style.display='inline'; Codehighlighter1_255_502_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_255_502_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_255_502_Closed_Text.style.display='none'; Codehighlighter1_255_502_Open_Image.style.display='inline'; Codehighlighter1_255_502_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>
						<span id="Codehighlighter1_255_502_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_255_502_Open_Text">
								<span style="COLOR: #000000">{  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    temp_point</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">point_1; </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 这里的temp_point是用于临时存储point_1的值也就是变量a的地址的 */ </span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">    point_1</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">point_2; </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 把point_2的值赋予point_1 */ </span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">    point_2</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">temp_point;  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 由于point_1的值已经改变无法找到,利用前面临时存储的也就是temp_point找回原point_1的值赋予point_2,打到把point_1和point_2值对换的目的*/ </span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
								</span>
								<span style="COLOR: #000000">}</span>
						</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />printf(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">%d,%d</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">point_1,</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">point_2); </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 利用*point_1和*point_2也就是分辨指向b和a的方法把值显示自爱屏幕上 */ </span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #000000">}</span>
				</span>
				<span style="COLOR: #000000">  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 此题需要注意和了解是的此法并没有改变变量a,b的值只是利用指针变量分别存储a和b的地址,然后再把那两个指针变量的值对换一下其实就是存储在  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">指针变量里面a与b的地址对换,在利用*point_1和*point_2的方式把调换后的值显示出来这里的*point_1实际就是a,此中算法并非真的改变a,b的值,而是  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<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: #000000"> </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">#include </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">stdio.h</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />main()  <br /><img id="Codehighlighter1_33_350_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_350_Open_Text.style.display='none'; Codehighlighter1_33_350_Closed_Image.style.display='inline'; Codehighlighter1_33_350_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_33_350_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_33_350_Closed_Text.style.display='none'; Codehighlighter1_33_350_Open_Image.style.display='inline'; Codehighlighter1_33_350_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_33_350_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_33_350_Open_Text">
						<span style="COLOR: #000000">{  <br /><img id="Codehighlighter1_46_70_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_70_Open_Text.style.display='none'; Codehighlighter1_46_70_Closed_Image.style.display='inline'; Codehighlighter1_46_70_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_46_70_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_70_Closed_Text.style.display='none'; Codehighlighter1_46_70_Open_Image.style.display='inline'; Codehighlighter1_46_70_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> a,b; </span>
						<span id="Codehighlighter1_46_70_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_46_70_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 定义a,b两个整形变量用于输入两个整数 </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_96_109_Open_Image" onclick="this.style.display='none'; Codehighlighter1_96_109_Open_Text.style.display='none'; Codehighlighter1_96_109_Closed_Image.style.display='inline'; Codehighlighter1_96_109_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_96_109_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_109_Closed_Text.style.display='none'; Codehighlighter1_96_109_Open_Image.style.display='inline'; Codehighlighter1_96_109_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">point_1,</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">point_2; </span>
						<span id="Codehighlighter1_96_109_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_96_109_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 定义三个指针变量 </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_134_149_Open_Image" onclick="this.style.display='none'; Codehighlighter1_134_149_Open_Text.style.display='none'; Codehighlighter1_134_149_Closed_Image.style.display='inline'; Codehighlighter1_134_149_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_134_149_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_134_149_Closed_Text.style.display='none'; Codehighlighter1_134_149_Open_Image.style.display='inline'; Codehighlighter1_134_149_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />scanf(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">%d,%d</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">a,</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">b); </span>
						<span id="Codehighlighter1_134_149_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_134_149_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 格式化输入a,b的值 </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_166_193_Open_Image" onclick="this.style.display='none'; Codehighlighter1_166_193_Open_Text.style.display='none'; Codehighlighter1_166_193_Closed_Image.style.display='inline'; Codehighlighter1_166_193_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_166_193_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_166_193_Closed_Text.style.display='none'; Codehighlighter1_166_193_Open_Image.style.display='inline'; Codehighlighter1_166_193_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />point_1 </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">a; </span>
						<span id="Codehighlighter1_166_193_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_166_193_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 把指针变量point_1的值指向变量a的地址 </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_210_237_Open_Image" onclick="this.style.display='none'; Codehighlighter1_210_237_Open_Text.style.display='none'; Codehighlighter1_210_237_Closed_Image.style.display='inline'; Codehighlighter1_210_237_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_210_237_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_210_237_Closed_Text.style.display='none'; Codehighlighter1_210_237_Open_Image.style.display='inline'; Codehighlighter1_210_237_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />point_2 </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">b; </span>
						<span id="Codehighlighter1_210_237_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_210_237_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 把指针变量point_2的值指向变量b的地址 </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_269_310_Open_Image" onclick="this.style.display='none'; Codehighlighter1_269_310_Open_Text.style.display='none'; Codehighlighter1_269_310_Closed_Image.style.display='inline'; Codehighlighter1_269_310_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_269_310_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_269_310_Closed_Text.style.display='none'; Codehighlighter1_269_310_Open_Image.style.display='inline'; Codehighlighter1_269_310_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />compositor(point_1,point_2); </span>
						<span id="Codehighlighter1_269_310_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_269_310_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 调用自定义的排序涵数,把a,b的地址传递给point_1和point_2 </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_334_347_Open_Image" onclick="this.style.display='none'; Codehighlighter1_334_347_Open_Text.style.display='none'; Codehighlighter1_334_347_Closed_Image.style.display='inline'; Codehighlighter1_334_347_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_334_347_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_334_347_Closed_Text.style.display='none'; Codehighlighter1_334_347_Open_Image.style.display='inline'; Codehighlighter1_334_347_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />printf(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">%d,%d</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,a,b); </span>
						<span id="Codehighlighter1_334_347_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_334_347_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 打印出a,b的值 </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> compositor(p1,p2)  <br /><img id="Codehighlighter1_397_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_397_418_Open_Text.style.display='none'; Codehighlighter1_397_418_Closed_Image.style.display='inline'; Codehighlighter1_397_418_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_397_418_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_397_418_Closed_Text.style.display='none'; Codehighlighter1_397_418_Open_Image.style.display='inline'; Codehighlighter1_397_418_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">p1,</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">p2; </span>
				<span id="Codehighlighter1_397_418_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
				<span id="Codehighlighter1_397_418_Open_Text">
						<span style="COLOR: #008000">/*</span>
						<span style="COLOR: #008000"> 定义形式参数p1,p2为指针变量 </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_421_682_Open_Image" onclick="this.style.display='none'; Codehighlighter1_421_682_Open_Text.style.display='none'; Codehighlighter1_421_682_Closed_Image.style.display='inline'; Codehighlighter1_421_682_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_421_682_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_421_682_Closed_Text.style.display='none'; Codehighlighter1_421_682_Open_Image.style.display='inline'; Codehighlighter1_421_682_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_421_682_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_421_682_Open_Text">
						<span style="COLOR: #000000">{  <br /><img id="Codehighlighter1_435_448_Open_Image" onclick="this.style.display='none'; Codehighlighter1_435_448_Open_Text.style.display='none'; Codehighlighter1_435_448_Closed_Image.style.display='inline'; Codehighlighter1_435_448_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_435_448_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_435_448_Closed_Text.style.display='none'; Codehighlighter1_435_448_Open_Image.style.display='inline'; Codehighlighter1_435_448_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> temp; </span>
						<span id="Codehighlighter1_435_448_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_435_448_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 建立临时存储变量 </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_468_501_Open_Image" onclick="this.style.display='none'; Codehighlighter1_468_501_Open_Text.style.display='none'; Codehighlighter1_468_501_Closed_Image.style.display='inline'; Codehighlighter1_468_501_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_468_501_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_468_501_Closed_Text.style.display='none'; Codehighlighter1_468_501_Open_Image.style.display='inline'; Codehighlighter1_468_501_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000"> (</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">p1</span>
						<span style="COLOR: #000000">&lt;*</span>
						<span style="COLOR: #000000">p2) </span>
						<span id="Codehighlighter1_468_501_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_468_501_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 如果*p1&lt;p2,注意这里的*p1和*p2其实就是a和b </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_508_678_Open_Image" onclick="this.style.display='none'; Codehighlighter1_508_678_Open_Text.style.display='none'; Codehighlighter1_508_678_Closed_Image.style.display='inline'; Codehighlighter1_508_678_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_508_678_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_508_678_Closed_Text.style.display='none'; Codehighlighter1_508_678_Open_Image.style.display='inline'; Codehighlighter1_508_678_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_508_678_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_508_678_Open_Text">
								<span style="COLOR: #000000">{  <br /><img id="Codehighlighter1_532_560_Open_Image" onclick="this.style.display='none'; Codehighlighter1_532_560_Open_Text.style.display='none'; Codehighlighter1_532_560_Closed_Image.style.display='inline'; Codehighlighter1_532_560_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_532_560_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_532_560_Closed_Text.style.display='none'; Codehighlighter1_532_560_Open_Image.style.display='inline'; Codehighlighter1_532_560_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        temp </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">*</span>
								<span style="COLOR: #000000">p1; </span>
								<span id="Codehighlighter1_532_560_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
								<span id="Codehighlighter1_532_560_Open_Text">
										<span style="COLOR: #008000">/*</span>
										<span style="COLOR: #008000"> 利用变量temp用于临时存储*p1和就是a的值 </span>
										<span style="COLOR: #008000">*/</span>
								</span>
								<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_582_619_Open_Image" onclick="this.style.display='none'; Codehighlighter1_582_619_Open_Text.style.display='none'; Codehighlighter1_582_619_Closed_Image.style.display='inline'; Codehighlighter1_582_619_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_582_619_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_582_619_Closed_Text.style.display='none'; Codehighlighter1_582_619_Open_Image.style.display='inline'; Codehighlighter1_582_619_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #000000">*</span>
								<span style="COLOR: #000000">p1 </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">*</span>
								<span style="COLOR: #000000">p2; </span>
								<span id="Codehighlighter1_582_619_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
								<span id="Codehighlighter1_582_619_Open_Text">
										<span style="COLOR: #008000">/*</span>
										<span style="COLOR: #008000"> 将*p1的值也就是a的值换成*p2的值也就是b的值,等价于a=b </span>
										<span style="COLOR: #008000">*/</span>
								</span>
								<span style="COLOR: #000000"> <br /><img id="Codehighlighter1_642_671_Open_Image" onclick="this.style.display='none'; Codehighlighter1_642_671_Open_Text.style.display='none'; Codehighlighter1_642_671_Closed_Image.style.display='inline'; Codehighlighter1_642_671_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_642_671_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_642_671_Closed_Text.style.display='none'; Codehighlighter1_642_671_Open_Image.style.display='inline'; Codehighlighter1_642_671_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #000000">*</span>
								<span style="COLOR: #000000">p2 </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> temp; </span>
								<span id="Codehighlighter1_642_671_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
								<span id="Codehighlighter1_642_671_Open_Text">
										<span style="COLOR: #008000">/*</span>
										<span style="COLOR: #008000"> 将*p2的值也就是temp的值等价于b=temp </span>
										<span style="COLOR: #008000">*/</span>
								</span>
								<span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img id="Codehighlighter1_689_726_Open_Image" onclick="this.style.display='none'; Codehighlighter1_689_726_Open_Text.style.display='none'; Codehighlighter1_689_726_Closed_Image.style.display='inline'; Codehighlighter1_689_726_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_689_726_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_689_726_Closed_Text.style.display='none'; Codehighlighter1_689_726_Open_Image.style.display='inline'; Codehighlighter1_689_726_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_689_726_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
				<span id="Codehighlighter1_689_726_Open_Text">
						<span style="COLOR: #008000">/*</span>
						<span style="COLOR: #008000"> 注意:此题与上题不同的是,直接改变了a于b的值达到真实改变的目的 </span>
						<span style="COLOR: #008000">*/</span>
				</span>
		</div>
<img src ="http://www.cppblog.com/tx7do/aggbug/6183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-04-24 15:50 <a href="http://www.cppblog.com/tx7do/archive/2006/04/24/6183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天找到的一个站点，有些东西还不错，学习笔记</title><link>http://www.cppblog.com/tx7do/archive/2006/04/24/6154.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 24 Apr 2006 04:16:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/04/24/6154.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/6154.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/04/24/6154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/6154.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/6154.html</trackback:ping><description><![CDATA[
		<a href="http://ljh.ee.nchu.edu.tw/~cch/program/">http://ljh.ee.nchu.edu.tw/~cch/program/</a>
		<br />
		<br />
		<h1 align="center">程式設計</h1>
		<p>這裡是我對於一些程式設計的學習紀錄，主要是紀錄一些我感興趣的事物和一些介紹。</p>
		<ul>
				<li>Database 
<ul><li><a href="http://ljh.ee.nchu.edu.tw/~cch/program/database/SQLite.html">SQLite</a></li><li><a href="http://ljh.ee.nchu.edu.tw/~cch/program/database/PostgreSQL.html">PostgreSQL</a></li></ul></li>
				<li>C/C++ 
<ul><li><a href="http://ljh.ee.nchu.edu.tw/~cch/program/wxwidgets/index.html">wxWidgets</a></li></ul><ul><li><a href="http://ljh.ee.nchu.edu.tw/~cch/program/SDL/index.html">SDL</a></li><li><a href="http://ljh.ee.nchu.edu.tw/~cch/program/TinyXML.html">TinyXML</a></li></ul></li>
				<li>
						<a href="http://ljh.ee.nchu.edu.tw/~cch/program/Tcl/index.html">Tcl/Tk</a>
				</li>
				<li>
						<a href="http://ljh.ee.nchu.edu.tw/~cch/program/dotNET/index.html">C# and dotNET</a>
						<br />
				</li>
				<li>Windows 
<ul><li><a href="http://ljh.ee.nchu.edu.tw/~cch/program/IME/index.html">IME</a></li><li><a href="http://ljh.ee.nchu.edu.tw/~cch/program/ogg.html">安裝 libogg 和 libvorbis</a></li></ul></li>
				<li>X and Unix<br /><ul><li><a href="http://ljh.ee.nchu.edu.tw/~cch/program/XIM/index.html">XIM</a> </li></ul></li>
		</ul>
<img src ="http://www.cppblog.com/tx7do/aggbug/6154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-04-24 12:16 <a href="http://www.cppblog.com/tx7do/archive/2006/04/24/6154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mapping Objects to Relational Databases </title><link>http://www.cppblog.com/tx7do/archive/2006/04/24/6132.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 24 Apr 2006 02:07:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/04/24/6132.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/6132.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/04/24/6132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/6132.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/6132.html</trackback:ping><description><![CDATA[
		<img src="http://morningspace.51.net/resource/MappingObjectsToRelationalDatabases.jpeg" />
<img src ="http://www.cppblog.com/tx7do/aggbug/6132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-04-24 10:07 <a href="http://www.cppblog.com/tx7do/archive/2006/04/24/6132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>完全版STL程序学习</title><link>http://www.cppblog.com/tx7do/archive/2006/04/24/6130.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 24 Apr 2006 02:04:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/04/24/6130.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/6130.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/04/24/6130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/6130.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/6130.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">#include </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">stdafx.h</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#ifndef    IOSTREAM_H<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">iostream</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">#endif</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">vector</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">algorithm</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">iterator</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">using</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">namespace</span>
				<span style="COLOR: #000000"> std;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_184_644_Open_Image" onclick="this.style.display='none'; Codehighlighter1_184_644_Open_Text.style.display='none'; Codehighlighter1_184_644_Closed_Image.style.display='inline'; Codehighlighter1_184_644_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_184_644_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_644_Closed_Text.style.display='none'; Codehighlighter1_184_644_Open_Image.style.display='inline'; Codehighlighter1_184_644_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> _tmain(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> argc, _TCHAR</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000"> argv[])</span>
				<span id="Codehighlighter1_184_644_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_644_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    typedef vector</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">                            int_vector;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    typedef istream_iterator</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">                istream_itr;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    typedef ostream_iterator</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">                ostream_itr;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    typedef back_insert_iterator</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000"> int_vector </span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">    back_ins_itr;<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" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> STL中的vector容器</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    int_vector num;<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" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 从标准输入设备读入整数， <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 直到输入的是非整型数据为止</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    copy(istream_itr(cin), istream_itr(), back_ins_itr(num));<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" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> STL中的排序算法</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    sort(num.begin(), num.end());<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" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 将排序结果输出到标准输出设备</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    copy(num.begin(), num.end(), ostream_itr(cout, </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">\n</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">));<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>完全STL的程序<br /><br /><p>在这个程序里几乎每行代码都是和STL有关的（除了main和那对花括号，当然还有注释），并且它包含了STL中几乎所有的各大部件（容器container，迭代器iterator, 算法algorithm, 适配器adaptor），唯一的遗憾是少了函数对象（functor）的身影。</p><p>还记得开头提到的一个典型系统所具有的基本特征吗？--输入+处理+输出。所有这些功能，在上面的程序里，仅仅是通过三行语句来实现的，其中每一行语句对应一种操作。对于数据的操作被高度的抽象化了，而算法和容器之间的组合，就像搭积木一样轻松自如，系统的耦合度被降到了极低点。这就是闪耀着泛型之光的STL的伟大力量。如此简洁，如此巧妙，如此神奇！就像魔术一般，以至于再一次让你摸不着头脑。怎么实现的？为什么在看第二版程序的时候如此清晰的你，又坠入了五里雾中（窃喜）。</p><p>请留意此处的标题（唯美主义的杰作），在实际环境中，你未必要做到这样完美。毕竟美好愿望的破灭，在生活中时常会发生。过于理想化，并不是一件好事，至少我是这么认为的。正如前面提到的，这个程序只是为了展示STL的独特魅力，你不得不为它的出色表现所折服，也许只有深谙STL之道的人才会想出这样的玩意儿来。如果你只是一般性的使用STL，做到第二版这样的程度也就可以了。</p><p>实在是因为这个程序太过"简单"，以至于我无法肯定，在你还没有完全掌握STL之前，通过我的讲解，是否能够领会这区区三行代码，我将尽我的最大努力。</p><p>前面提到的迭代器可以对容器内的任意元素进行定位和访问。在STL里，这种特性被加以推广了。一个cin代表了来自输入设备的一段数据流，从概念上讲它对数据流的访问功能类似于一般意义上的迭代器，但是C++中的cin在很多地方操作起来并不像是一个迭代器，原因就在于其接口和迭代器的接口不一致（比如：不能对cin进行++运算，也不能对之进行取值运算--即*运算）。为了解决这个矛盾，就需要引入适配器的概念。istream_iterator便是一个适配器，它将cin进行包装，使之看起来像是一个普通的迭代器，这样我们就可以将之作为实参传给一些算法了（比如这里的copy算法）。因为算法只认得迭代器，而不会接受cin。对于上面程序中的第一个copy函数而言，其第一个参数展开后的形式是：istream_iterator<int>(cin)，其第二个参数展开后的形式是：istream_iterator<int>()（如果你对typedef的语法不清楚，可以参考有关的c++语言书籍）。其效果是产生两个迭代器的临时对象，前一个指向整型输入数据流的开始，后一个则指向"pass-the-end value"。这个函数的作用就是将整型输入数据流从头至尾逐一"拷贝"到vector<int>这个准整型数组里，第一个迭代器从开始位置每次累进，最后到达第二个迭代器所指向的位置。或许你要问，如果那个copy函数的行为真如我所说的那样，为什么不写成如下这个样子呢？</int></int></int></p><p></p><pre>copy(istream_iterator&lt;int&gt;(cin), istream_iterator&lt;int&gt;(), num.begin());
	 </pre><p></p><p>你确实可以这么做，但是有一个小小的麻烦。还记得第一版程序里的那个数组越界问题吗？如果你这么写的话，就会遇到类似的麻烦。原因在于copy函数在"拷贝"数据的时候，如果输入的数据个数超过了vector容器的范围时，数据将会拷贝到容器的外面。此时，容器不会自动增长容量，因为这只是简单地拷贝，并不是从末端插入。为了解决这个问题，另一个适配器back_insert_iterator登场了，它的作用就是引导copy算法每次在容器末端插入一个数据。程序中的那个back_ins_itr(num)展开后就是：back_insert_iterator<int_vector>(num)，其效果是生成一个这样的迭待器对象。</int_vector></p><img src ="http://www.cppblog.com/tx7do/aggbug/6130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-04-24 10:04 <a href="http://www.cppblog.com/tx7do/archive/2006/04/24/6130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>