﻿<?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++博客-BoolKinG's Blog</title><link>http://www.cppblog.com/boolking/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 16 Apr 2026 05:00:02 GMT</lastBuildDate><pubDate>Thu, 16 Apr 2026 05:00:02 GMT</pubDate><ttl>60</ttl><item><title>porting thrift to msvc</title><link>http://www.cppblog.com/boolking/archive/2009/01/19/72173.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Mon, 19 Jan 2009 06:39:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2009/01/19/72173.html</guid><description><![CDATA[







<span style="WORD-SPACING: 0px; FONT: 16px Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">
<div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">因为最近要用到RPC，考察了一下thrift（facebook用的一套rpc框架）和google protocol buffer。<br><br>thrift支持的语言非常多，不光支持c++，java，python，ruby等非常流行的语言外还支持ocaml，Squeak等很少见的语言，比google protocol buffer好多了，而且已经内置RPC，不像google protocol buffer的RPC还藏着掖着。比较google protocol buffer和thrift的文章比较多，其中google到的比较靠前的<a href="http://blog.scaner.i.thu.cn/index.php/2008/07/10/thrift-vs-protobuf/">一篇blog</a>指出thift的c++版本对windows支持不好，我一开始也是觉得如此，主要是thrift只提供了autoconf，automake作为构建工具，在windows上只能用cygwin或者msys才能比较方便的编译，而google protocol buffer提供了vc的工程文件。另外在代码的规范性方面，的确是google protocol buffer更好。</div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">此次移植的目的是在windows上运行的client和compiler，因为server肯定是用linux的，移植没太大必要。根据我从前移植代码的经验，发现妨碍移植的关键在于系统api的差异，或者是某些依赖库的差异，如果差异太大，则移植比较麻烦。另外，在移植时我比较倾向于先移植一个最小的功能集合，并逐步完善。</div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">在泛读了thrift的代码和文档后发现thrift中并没有用到非常难于移植的api，我先用thrift compiler开始，thrift compiler很简单，基本不用修改就可以在vc2008上编译，主要依赖的是flex和bison，在windows下也都不难找到，也可以在linux生成后，再把生成的thriftl.cc，thrifty.cc和thrifty.h直接copy过来使用。编译完成后发现在处理include和externs的时候有问题，主要是linux和windows的路径分隔符（"/"和"\\"）的差异，修改main.cc里面的program_name和directory_name就可以解决了，这个问题在msys下面也存在。</div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">接下来就是client和server了，我打算主要使用Framed Transport＋Binary protocol＋nonblocking server，因为使用的是libevent（在windows上已经有移植，直接拿过来用就可以了，在linux上面用的是epoll，性能也不错），也没有其他的依赖库，移植起来还是比较方便的。</div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">先从client开始，在TSocket中因为使用了poll来进行超时处理，先改成阻塞方式，将所有的非阻塞和poll相关代码注释掉，基本可以编译成功，然后还有就是ctime_t的地方可以用vc的ctime_s代替，但是dbgtime的长度要改成26。运行tutorial没什么问题。然后就是加入超时处理了，虽然ms在windows server 2008里面引入了WSAPoll，我用的是xp，只有用select来模拟一个poll了，反正功能差不多，只是接口不太一样。完成后就可以生成基本的client runtime库了。</div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">至于server，大致看了一下，里面主要的问题是使用了socketpair和poll，主要是用来做libevent的通知。不过socketpair就自己建两个socket然后连接起来就可以了，poll用之前client的select模拟实现，移植起来问题应该不大。</div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">client的代码因为移植时间比较紧，只有半天时间，还没清理，就不放上来丢人了。</div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">只发一个tutorial的client的exe（需要vc9的runtime才能运行），修改后的Framed Transport＋Binary protocol＋nonblocking server的linux server代码和compiler的vc9工程代码。<a href="http://www.cppblog.com/Files/boolking/thrift.rar">下载</a></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"><br></div>
</span><img src ="http://www.cppblog.com/boolking/aggbug/72173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2009-01-19 14:39 <a href="http://www.cppblog.com/boolking/archive/2009/01/19/72173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2005SP1安装加速</title><link>http://www.cppblog.com/boolking/archive/2007/01/08/17425.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Mon, 08 Jan 2007 06:29:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2007/01/08/17425.html</guid><description><![CDATA[vs2005sp1出来已经有一段时间了，由于安装速度太慢，我一直都没有安装，今天遇到一个vs的bug，不得已需要安装sp1，上网找了一下，发现一个解决安装速度慢的方案。<br />之所以速度慢是很大程度上是因为windows installer的cache造成，在安装时暂时禁用掉windows installer的cache可以极大的加速sp1的安装，而且可以节省1.3G的磁盘空间。<br />将下面的代码存为bat文件，通过这个bat来安装sp1<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">reg export HKLM\Software\Policies\Microsoft\Windows\Installer installer.reg<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />reg add HKLM\Software\Policies\Microsoft\Windows\Installer </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">v MaxPatchCacheSize </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">t REG_DWORD </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">d </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">f<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />net stop msiserver<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />start </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">wait VS80sp1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">KB926601</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">X86</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">ENU.exe<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />reg delete HKLM\Software\Policies\Microsoft\Windows\Installer </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">v MaxPatchCacheSize </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">f<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />reg import installer.reg<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />net stop msiserver<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />del </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">q installer.reg </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">nul</span></div><br /><br />另外，VS2005的intellisense对C++来说实在太慢，代码量大的时候cpu占用率一直在100%，功能也比不上VA，将<font face="Verdana" size="2">Microsoft Visual Studio 8\VC\vcpackages\feacp.dll</font>改名直接禁用之。<br /><br /><img src ="http://www.cppblog.com/boolking/aggbug/17425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2007-01-08 14:29 <a href="http://www.cppblog.com/boolking/archive/2007/01/08/17425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>这难道就是今后的桌面？</title><link>http://www.cppblog.com/boolking/archive/2006/07/01/9259.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Sat, 01 Jul 2006 05:01:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2006/07/01/9259.html</guid><description><![CDATA[
		<p>
				<font color="#800080">
						<font color="#000000">BumpTop</font>
						<a href="http://bumptop.ca/">
								<br />http://bumptop.ca/</a>
						<br />
				</font>
				<br />
				<img src="http://honeybrown.ca/Pubs/moneyshot_sm.jpg" />
				<br />
				<br />看演示非常不错<br />对于我这种喜欢什么都放在windows桌面上的人是再合适不过的了，只用鼠标一拖，所有的东西都自动排好堆成一摞，而且查阅起来也非常方便。<br /><br />现在还没有可供测试的版本，希望很快可以用上<br /><br /></p>
<img src ="http://www.cppblog.com/boolking/aggbug/9259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2006-07-01 13:01 <a href="http://www.cppblog.com/boolking/archive/2006/07/01/9259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>boost在vc2005中的编译出现codepage警告和DEPRECATED函数的解决</title><link>http://www.cppblog.com/boolking/archive/2006/06/19/8715.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Mon, 19 Jun 2006 09:44:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2006/06/19/8715.html</guid><description><![CDATA[
		<p>近日下载了一个VC2005 Express Edition，用它来编译boost，发现有不少的warning C4819，说代码文件中有cp936无法表示的字符，还有就是vc2005特有的废弃的ANSI函数的错误，虽说不影响编译，但是看着时不时出现的warning总是让人心神不安，还容易掩盖其他的错误，如果是直接用cl编译，只要加上/wd4819 /D_CRT_SECURE_NO_DEPRECATE就可以不显示这两个错误，但是大家都知道boost是使用其特有的boost.build进行编译的，下面我就给出如何修改boost.build来抑制这两个错误的显示</p>
		<p>boost.build分为v1和v2两个版本<br />v1：<br />修改$(BOOST_ROOT)/tools/build/v1/vc-8_0-tools.jam<br />将</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">flags vc</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">8_0 C</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">FLAGS : </span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">Zc:forScope ;</span>
		</div>
		<p>改为<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">flags vc</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">8_0 C</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">FLAGS : </span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">Zc:forScope<font color="#ff0000"> </font></span>
				<font color="#ff0000">
						<font color="#ff0000">
								<span style="COLOR: #ff0000">/</span>
								<span style="COLOR: #ff0000">wd4819 </span>
								<span style="COLOR: #000000">/</span>
						</font>
						<span style="COLOR: #000000">
								<font color="#ff0000">D_CRT_SECURE_NO_DEPRECATE</font> ;</span>
				</font>
		</div>
		<p>v2：<br />cvs版本<br />修改$(BOOST_ROOT)/tools/build/v2/tools/msvc.jam<br />在</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"># </span>
				<span style="COLOR: #000000">8.0</span>
				<span style="COLOR: #000000"> adds some more options<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<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" />
				<font color="#000000">
						<span style="COLOR: #000000">flags msvc.compile CFLAGS $(condition) : </span>
						<span style="COLOR: #000000">/</span>
						<span style="COLOR: #ff0000">
								<font color="#000000">wd4819</font> </span>
						<span style="COLOR: #ff0000">/</span>
				</font>
				<span style="COLOR: #ff0000">
						<font color="#000000">D_CRT_SECURE_NO_DEPRECATE ;</font>
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>boost 1.33.1版本<br />将<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">    # </span>
				<span style="COLOR: #000000">8.0</span>
				<span style="COLOR: #000000"> deprecates some of the options<br />    </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">!</span>
				<span style="COLOR: #000000"> [ MATCH </span>
				<span style="COLOR: #000000">^</span>
				<span style="COLOR: #000000">([</span>
				<span style="COLOR: #000000">67</span>
				<span style="COLOR: #000000">].</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">) : $(version) ] <br />    {<br />        flags msvc.compile CFLAGS $(condition)</span>
				<span style="COLOR: #000000">/&lt;</span>
				<span style="COLOR: #000000">optimization</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">speed : </span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">O2 ;<br />        flags msvc.compile CFLAGS $(condition)</span>
				<span style="COLOR: #000000">/&lt;</span>
				<span style="COLOR: #000000">optimization</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">space : </span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">O1 ;<br />        flags msvc.link.dll MANIFEST : </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">mt -manifest </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> ;<br />        flags msvc.link.dll OUTPUTRESOURCE : </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">-outputresource:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> ;<br />    }</span>
		</div>
		<p>改为：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">    # </span>
				<span style="COLOR: #000000">8.0</span>
				<span style="COLOR: #000000"> deprecates some of the options<br />    </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">!</span>
				<span style="COLOR: #000000"> [ MATCH </span>
				<span style="COLOR: #000000">^</span>
				<span style="COLOR: #000000">([</span>
				<span style="COLOR: #000000">67</span>
				<span style="COLOR: #000000">].</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">) : $(version) ] <br />    {<br />        <font color="#ff0000">flags msvc.compile CFLAGS $(condition) : </font></span>
				<font color="#ff0000">
						<span style="COLOR: #ff0000">/</span>
						<span style="COLOR: #ff0000">wd4819 </span>
						<span style="COLOR: #ff0000">/</span>
				</font>
				<span style="COLOR: #000000">
						<font color="#ff0000">D_CRT_SECURE_NO_DEPRECATE ;</font>
						<br />        flags msvc.compile CFLAGS $(condition)</span>
				<span style="COLOR: #000000">/&lt;</span>
				<span style="COLOR: #000000">optimization</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">speed : </span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">O2 ;<br />        flags msvc.compile CFLAGS $(condition)</span>
				<span style="COLOR: #000000">/&lt;</span>
				<span style="COLOR: #000000">optimization</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">space : </span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">O1 ;<br />        flags msvc.link.dll MANIFEST : </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">mt -manifest </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> ;<br />        flags msvc.link.dll OUTPUTRESOURCE : </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">-outputresource:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> ;<br />    }</span>
		</div>
<img src ="http://www.cppblog.com/boolking/aggbug/8715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2006-06-19 17:44 <a href="http://www.cppblog.com/boolking/archive/2006/06/19/8715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么main有多种格式？</title><link>http://www.cppblog.com/boolking/archive/2006/06/07/8250.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Wed, 07 Jun 2006 09:40:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2006/06/07/8250.html</guid><description><![CDATA[学过C/C++语言的都知道程序的执行从main函数开始（先不说static对象和CRT），大部分学过C/C++的也都知道main可以有int main()和int main(int argc, char**argv)的参数格式，有不少人还知道int main(int, char**, char**)的参数形式，返回值也可以为void，但是为什么C/C++ compiler能够支持这些格式呢？在初学C的时候，我以为是编译器内置的功能来支持<br /><br />近日研究VC的CRT，发现原来是通过调用规范（calling coventions）实现的。<br />调用规范分为参数传递次序，调用栈维护，命名修饰和大小写转换4个规范组成。<br /><br />大部分的C语言编译器（至少是在x86架构上）遵循以下的规范<br />命名修饰和大小写转换：无论函数的signature是什么样子，在编译时会将名为“Xxxx”的函数转换为“_Xxxx”的形式，即在函数名前面加上“_”，大小写不变，也就是说不管是什么形式的main函数，有没有返回值，有多少个参数都会在编译时转换为_main。因此虽然在CRT中使用的是<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> __cdecl main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </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">**</span><span style="COLOR: #000000">);</span></div><p>的形式声明的main函数，但是在链接的时候无论是什么形式的main都符合要求，只不过除了在文章开始提到的3种形式有意义外，其他的参数格式要么是得到无意义的值，要么还会溢出调用栈（使用超过3个参数）<br />测试代码如下：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> a1, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> a2, unsigned </span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> a3, </span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000"> a4, </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> a5, unsinged </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> a6)<br />{<br /> printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello World!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /> </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br />}</span></div><p> </p><img src ="http://www.cppblog.com/boolking/aggbug/8250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2006-06-07 17:40 <a href="http://www.cppblog.com/boolking/archive/2006/06/07/8250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习Vim的一点心得</title><link>http://www.cppblog.com/boolking/archive/2006/05/14/7137.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Sun, 14 May 2006 09:35:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2006/05/14/7137.html</guid><description><![CDATA[
		<p>现在的工作是在unix平台，平时是用UE的ftp功能来写代码的，有时候文件大了，传输就很慢，而且经常不是很稳定。<br />下定决心要学学Vim（现在应该没有人用原始的vi了吧），在经过二周的使用后，发现Vim实在是非常不错的一个editor，现在我在Windows上也装了一个Vim，使用起来颇为顺手，基本上已经替代了UE。<br /><br />下面介绍一些我在使用Vim的过程中得到的一些心得：<br />1. 在使用Vim之前一定要进行一些设置，否则你使用起来肯定会很不爽，下面是我的配置</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">
				<span style="COLOR: #008080"> 1</span>
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">==============================================<br /></span>
				<span style="COLOR: #008080"> 2</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> General settings<br /></span>
				<span style="COLOR: #008080"> 3</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">==============================================<br /></span>
				<span style="COLOR: #008080"> 4</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080"> 5</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set nocp<br /></span>
				<span style="COLOR: #008080"> 6</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set ru<br /></span>
				<span style="COLOR: #008080"> 7</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> 使用cindent<br /></span>
				<span style="COLOR: #008080"> 8</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set cin<br /></span>
				<span style="COLOR: #008080"> 9</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set cino</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">:0g0t0(sus<br /></span>
				<span style="COLOR: #008080">10</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">11</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set sm<br /></span>
				<span style="COLOR: #008080">12</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set ai<br /></span>
				<span style="COLOR: #008080">13</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> 缩近<br /></span>
				<span style="COLOR: #008080">14</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set sw=4<br /></span>
				<span style="COLOR: #008080">15</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set ts=4<br /></span>
				<span style="COLOR: #008080">16</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> 不展开tab为空格，反之set et<br /></span>
				<span style="COLOR: #008080">17</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set noet<br /></span>
				<span style="COLOR: #008080">18</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">19</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set lbr<br /></span>
				<span style="COLOR: #008080">20</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set hls<br /></span>
				<span style="COLOR: #008080">21</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set backspace</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">indent</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">eol</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">start<br /></span>
				<span style="COLOR: #008080">22</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set whichwrap</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">b</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">s</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">[</span>
				<span style="COLOR: #800000">,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">]</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">23</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set fo+</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">mB<br /></span>
				<span style="COLOR: #008080">24</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set selectmode</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">25</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set mousemodel</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">popup<br /></span>
				<span style="COLOR: #008080">26</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set keymodel</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">27</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set selection</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">inclusive<br /></span>
				<span style="COLOR: #008080">28</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set matchpairs+</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">&lt;:&gt;<br /></span>
				<span style="COLOR: #008080">29</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">30</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">==============================================<br /></span>
				<span style="COLOR: #008080">31</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> Cursor movement<br /></span>
				<span style="COLOR: #008080">32</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">==============================================<br /></span>
				<span style="COLOR: #008080">33</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />nnoremap &lt;Down&gt; gj<br /></span>
				<span style="COLOR: #008080">34</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />nnoremap &lt;Up&gt; gk<br /></span>
				<span style="COLOR: #008080">35</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />vnoremap &lt;Down&gt; gj<br /></span>
				<span style="COLOR: #008080">36</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />vnoremap &lt;Up&gt; gk<br /></span>
				<span style="COLOR: #008080">37</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />inoremap &lt;Down&gt; &lt;C-o&gt;gj<br /></span>
				<span style="COLOR: #008080">38</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />inoremap &lt;Up&gt; &lt;C-o&gt;gk<br /></span>
				<span style="COLOR: #008080">39</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">40</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />nnoremap &lt;End&gt; g$<br /></span>
				<span style="COLOR: #008080">41</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />nnoremap &lt;Home&gt; g0<br /></span>
				<span style="COLOR: #008080">42</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />vnoremap &lt;End&gt; g$<br /></span>
				<span style="COLOR: #008080">43</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />vnoremap &lt;Home&gt; g0<br /></span>
				<span style="COLOR: #008080">44</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />inoremap &lt;End&gt; &lt;C-o&gt;g$<br /></span>
				<span style="COLOR: #008080">45</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />inoremap &lt;Home&gt; &lt;C-o&gt;g0<br /></span>
				<span style="COLOR: #008080">46</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">47</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />nmap &lt;C-F4&gt; :confirm bd&lt;CR&gt;<br /></span>
				<span style="COLOR: #008080">48</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />vmap &lt;C-F4&gt; &lt;ESC&gt;:confirm bd&lt;Enter&gt;<br /></span>
				<span style="COLOR: #008080">49</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />omap &lt;C-F4&gt; &lt;ESC&gt;:confirm bd&lt;Enter&gt;<br /></span>
				<span style="COLOR: #008080">50</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />map! &lt;C-F4&gt; &lt;ESC&gt;:confirm bd&lt;Enter&gt;<br /></span>
				<span style="COLOR: #008080">51</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">52</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> 打开语法高亮<br /></span>
				<span style="COLOR: #008080">53</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />syntax on<br /></span>
				<span style="COLOR: #008080">54</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> 使用语法进行折叠<br /></span>
				<span style="COLOR: #008080">55</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set foldmethod=syntax<br /></span>
				<span style="COLOR: #008080">56</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">57</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />if (has(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">gui_running</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">))<br /></span>
				<span style="COLOR: #008080">58</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    set nowrap<br /></span>
				<span style="COLOR: #008080">59</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    set guioptions+=b<br /></span>
				<span style="COLOR: #008080">60</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    colo inkpot<br /></span>
				<span style="COLOR: #008080">61</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />else<br /></span>
				<span style="COLOR: #008080">62</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    set wrap<br /></span>
				<span style="COLOR: #008080">63</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    colo ron<br /></span>
				<span style="COLOR: #008080">64</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />endif<br /></span>
				<span style="COLOR: #008080">65</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">66</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> 设置swap文件的目录<br /></span>
				<span style="COLOR: #008080">67</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set dir</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">D:\vim\tmp<br /></span>
				<span style="COLOR: #008080">68</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">设置备份文件的目录<br /></span>
				<span style="COLOR: #008080">69</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />set backupdir=D:\vim\bak<br /></span>
				<span style="COLOR: #008080">70</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">71</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> 设置leader的快捷键，原来的“\”太远了，而且位置还不固定<br /></span>
				<span style="COLOR: #008080">72</span>
				<span style="COLOR: #000000">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />let mapleader</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">"</span>
		</div>
		<p>这里是一些基本设置<br />如果有什么不太清楚的，可以在Vim里normal模式下<br />:h 关键字 <br />查看帮助<br /><br />2. Vim教程<br />推荐先看看Vim自带的Tutor（这可是位好老师）<br />用vimtutor启动Vim<br />或者在Vim里面用:h tutor来启动<br />中文教程我推荐李果正的《大家来学Vim》<br /><a href="http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html">这里</a>还有Vim的键位示意图，可以打出来随时查看哦<br /><br /> <br />3. Vim的插件<br />有几个插件强烈推荐<br />(1) A：在同名的cpp和h文件之间切换 <a href="http://www.vim.org/scripts/script.php?script_id=31">http://www.vim.org/scripts/script.php?script_id=31</a><a href="http://www.vim.org/"></a><br />(2) NERD_comments：超强的注释插件，支持很多语言的注释风格，按照上面的设置，只需要",cc"就可以添加注释了 <a href="http://www.vim.org/scripts/script.php?script_id=1218">http://www.vim.org/scripts/script.php?script_id=1218</a><br />(3) csupport：写C/C++代码必备 <a href="http://www.vim.org/scripts/script.php?script_id=213">http://www.vim.org/scripts/script.php?script_id=213</a><br />(4) LargeFile：再也不用担心打开大文件会慢了 <a href="http://www.vim.org/scripts/script.php?script_id=1506">http://www.vim.org/scripts/script.php?script_id=1506</a><br />(5) TipOfTheDay：多读读vim的tips会有很多收获的，记得要经常更新tips文件啊 <a href="http://www.vim.org/scripts/script.php?script_id=88">http://www.vim.org/scripts/script.php?script_id=88</a><br />(6) cppomnicomplete：提供C++中类/对象成员的补全（需要Vim7） <a href="http://www.vim.org/scripts/script.php?script_id=1520">http://www.vim.org/scripts/script.php?script_id=1520</a><br />(7) ColorSamplerPack：提供上百种颜色主题，必有一款适合你，不过大多数都是在GUI下才有相应的效果 <a href="http://www.vim.org/scripts/script.php?script_id=625">http://www.vim.org/scripts/script.php?script_id=625</a><br />(8) vimcdoc：汉化的vim帮助 <a href="http://vimcdoc.sourceforge.net/">http://vimcdoc.sourceforge.net/</a><br /><br />3. 在telnet中使用vim的颜色<br />如果是在linux中使用telnet，SecureCRT会自动使用合适的颜色来显示vim不同的颜色，但是如果在其他unix下就会无法显示正确的颜色，所有的东西都是同一种颜色。<br /><br />在.vimrc中加入（^[的输入方式是Ctrl-v然后输入Esc）：<br />if !has("gui_running")<br />set t_Co=8<br />set t_Sf=^[[3%p1%dm<br />set t_Sb=^[[4%p1%dm<br />endif<br />并在SecureCRT的模拟终端类型选择ANSI，并钩上ANSI Color，就可以显示不同的颜色了<br /><br />4. vim的自动补全功能<br />一般使用Ctrl+n就可以自动补全了，从Vim7后，C/C++的函数、变量或者是类的成员，使用Ctrl+x，Ctrl+o也可以自动补全。在安装了cppomnicomplete后，对象的成员也可以用Ctrl+x，Ctrl+o来补全<br /><br />5. 代码折叠<br />许多editor都支持代码折叠，Vim也不例外<br />常用的快捷键<br />zc 折叠代码<br />zo 打开折叠的代码<br />还有其他的快捷键可以查看帮助<br />:h fold<br /><br />6. 自动格式化代码<br />在Visual模式下，选中代码按=就可以了<br />Normal模式下，按=会格式化光标所在行<br /><br />7. 脚本支持<br />Vim不仅有内建的脚本功能，还支持Perl，Python，Tcl，Ruby和MzScheme这些流行的脚本语言编写Vim的扩展<br /><br />Vim的功能是不是很强大？<br />经过1年多的测试Vim 7.0也release了，还不快下载来试试<br /><a href="http://www.vim.org/">http://www.vim.org</a><br /><br />Happy Vimming!<br /><br />对于已经习惯了使用Vim但是要在Windows下编程的用户<br />我还推荐<br /><a href="http://www.viemu.com/">ViEmu</a>，可以在VisualStudio下模拟Vi的编辑操作<br />不过只有30天的试用期<img height="19" src="http://www.cppblog.com/Emoticons/sad_smile.gif" width="19" border="0" /></p>
<img src ="http://www.cppblog.com/boolking/aggbug/7137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2006-05-14 17:35 <a href="http://www.cppblog.com/boolking/archive/2006/05/14/7137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VSS的又一个Internet解决方案SourceAnywhere</title><link>http://www.cppblog.com/boolking/archive/2006/05/14/7129.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Sun, 14 May 2006 06:23:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2006/05/14/7129.html</guid><description><![CDATA[以下转自我在msn的blog<br /><br /><div>今天又看到一个和Source Offsite类似的软件：SourceAnywhere。不用装.net framework，对中文的支持也很好，早知道有这个东东，就不用浪费一个下午取搞定那个中文版的SOS了<img src="http://spaces.msn.com/rte/emoticons/smile_sad.gif" />。</div><div>不过这个东东和SOS实在是有点太像了，就连没有指定database之前不能启动服务都一模一样，不知道两者之间有什么关系<br /><br /></div><img src ="http://www.cppblog.com/boolking/aggbug/7129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2006-05-14 14:23 <a href="http://www.cppblog.com/boolking/archive/2006/05/14/7129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SourceOffsite汉化版的license问题</title><link>http://www.cppblog.com/boolking/archive/2006/05/14/7128.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Sun, 14 May 2006 06:22:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2006/05/14/7128.html</guid><description><![CDATA[以下转自我在msn的blog<br /><br /><div>本文内容纯属技术研究，请勿将其用于非法用途！<br /></div><div>如需转载，请注明出处。<br /></div><div> </div><div>SourceOffsite是一个基于 Microsoft Visual SourceSafe 数据库的源代码管理软件，具有以下特性: <br /><br /><br />1. 比 Microsoft Visual SourceSafe 客户端快。 <br />2. 可以通过 TCP/IP 方式访问和操作 VSS 库。 <br />3. 在 Windows、Slolaris 和 Linux 上都提供了客户端。<br />4. 并且通过传输数据的压缩和加密方式，使得文件操作的速度大大加快并增强了系统的安全性。5. 高度 IDE 集成，可以成为 Visual C++ 的 SCC 提供者。 <br /></div><div>就是有一个问题，对中文支持很糟糕，如果在代码库中有中文名的文件，就会出现乱码，<a href="http://www.bbsftp.net/myweb/SoftDownShow.asp?SoftID=38"><font color="#003300">Rick的汉化版</font></a>解决了这个问题，但是由于改变了对字符串的处理方式（SourceOffsite是一个.net程序，我对.net完全是一窍不通，所以不要问我是怎么修改的），以前的keygen不能用了，出现错误“<font color="#800000">Incorrect format of serialnumber 1\n Incorrect format of serialnumbers”</font>。虽然该汉化版附带了2用户的永久license，但是感觉总是不太爽，于是祭起.Net Reflector反编译之，发现汉化版已经Obfuscated，而原始版本却没有经过Obfuscate，于是可以根据原始版本来得到汉化版的注册的大致流程。<br /></div><div> </div><div><pre>｛msn的blog真烂，居然有字数限制，过程写了贴不上来<img src="http://spaces.msn.com/rte/emoticons/smile_cry.gif" />｝<br /></pre><pre>直接写结果了（相信大部分人都希望直接看结果<img src="http://spaces.msn.com/rte/emoticons/smile_wink.gif" />）<br /></pre><pre>用UE打开汉化版的SosService.exe文件，将0xEEBC处的16改为17<br /><br /></pre><pre>sossvr.prp文件中server.serialnumbers=00020002ffff000000000004853352c3<br /></pre><pre>大功告成<img src="http://spaces.msn.com/rte/emoticons/smile_tongue.gif" />，最大用户数的永久license<br /><br /></pre></div><img src ="http://www.cppblog.com/boolking/aggbug/7128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2006-05-14 14:22 <a href="http://www.cppblog.com/boolking/archive/2006/05/14/7128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怀旧小游戏</title><link>http://www.cppblog.com/boolking/archive/2006/05/14/7127.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Sun, 14 May 2006 06:21:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2006/05/14/7127.html</guid><description><![CDATA[以下转自我在msn的blog：<br /><br /><p>今天在bt上发现了一个怀旧小游戏合集，里面都是10几年前我们在电脑房（现在网吧的前身）里面dos下玩的游戏，虽然现在看来非常粗糙，但是曾经在电脑房里鏖战的日日夜夜却是难以磨灭的美好回忆。</p><p>下载下来发现有些游戏不能在xp下运行，推荐三个软件<a href="http://dosbox.sourceforge.net/"><font color="#003300">dosbox</font></a>、<a href="http://vdmsound.sourceforge.net/"><font color="#003300">VDMSound</font></a>和<a href="http://www.glidos.net/"><font color="#003300">glidos</font></a>，第一个是一个跨平台的dos模拟器，不想在VMWare里面装个Dos就试试它吧，不过还是有些游戏支持的不是太好；第二个是一个在xp的console下模拟声卡的东东；第三个是我强烈推荐的，可以在windows下运行需要glide（游戏龄超过10年的人都知道这是当年的3D硬件王者3dfx的编程接口，类似现在的Direct3D）的硬件加速游戏，很好的支持了古墓丽影1，就是非注册版在后面几关屏幕中间会出现一个很大的logo<img src="http://spaces.msn.com/rte/emoticons/smile_sad.gif" />（试试emule，会有意想不到的收获<img src="http://spaces.msn.com/rte/emoticons/smile_tongue.gif" />）。</p><p>实在不行就在VMWare里面装个dos来怀旧吧。<br /><br /></p><img src ="http://www.cppblog.com/boolking/aggbug/7127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2006-05-14 14:21 <a href="http://www.cppblog.com/boolking/archive/2006/05/14/7127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cppblog的第一篇blog</title><link>http://www.cppblog.com/boolking/archive/2006/05/14/7126.html</link><dc:creator>BoolKinG</dc:creator><author>BoolKinG</author><pubDate>Sun, 14 May 2006 06:14:00 GMT</pubDate><guid>http://www.cppblog.com/boolking/archive/2006/05/14/7126.html</guid><description><![CDATA[之前都是在msn写blog的，现在live.com被封，msn的慢的不行，限制太多，我的maxthon还经常被它弄的假死，因此换到cppblog。cppblog的确比msn快，而且用起来也顺手些<br /><br />以后以此为家，各位前辈也多多指教了<br /><br /><img src ="http://www.cppblog.com/boolking/aggbug/7126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/boolking/" target="_blank">BoolKinG</a> 2006-05-14 14:14 <a href="http://www.cppblog.com/boolking/archive/2006/05/14/7126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>