﻿<?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>博客园-kaikai向前走</title><link>http://www.cnblogs.com/kaikai/</link><description>转职任务完成。崭新fn诞生</description><language>zh-cn</language><lastBuildDate>Wed, 10 Feb 2010 00:11:07 GMT</lastBuildDate><pubDate>Wed, 10 Feb 2010 00:11:07 GMT</pubDate><ttl>60</ttl><item><title>TFS:添加已经在项目中但不在TFS中的文件</title><link>http://www.cnblogs.com/kaikai/archive/2009/11/02/1594380.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Mon, 02 Nov 2009 03:18:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/11/02/1594380.html</guid><description><![CDATA[<p>阅读: 32 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-11-02 11:18 <a href="http://www.cnblogs.com/kaikai/archive/2009/11/02/1594380.html" target="_blank">原文链接</a></p><p><span style="font-family: 宋体">转移一个项目的代码，会发现这些代码不在</span>TFS<span style="font-family: 宋体">的管理中也没有成为新增文件（没有</span>TFS<span style="font-family: 宋体">的加号小图标）。</span></p>
<p><span style="font-family: 宋体">这时可以选中这些文件后从菜单里选择</span></p>
<p><strong><span style="font-family: 宋体">文件</span>-&gt;</strong><strong><span style="font-family: 宋体">源代码管理</span>-&gt;</strong><strong><span style="font-family: 宋体">从源代码管理中排除<br /></span></strong><span style="font-family: 宋体"><img height="288" alt="" src="http://images.cnblogs.com/cnblogs_com/kaikai/shot.PNG" width="381" border="0" /></span></p>
<p><span style="font-family: 宋体">然后再次选择</span></p>
<p><strong><span style="font-family: 宋体">文件</span>-&gt;</strong><strong><span style="font-family: 宋体">源代码管理</span>-&gt;</strong><strong><span style="font-family: 宋体">从源代码管理中排除</span></strong></p><span style="font-size: 10.5pt; font-family: 宋体">去掉勾选。于是这些文件进入了挂起的更改。</span><img src="http://www.cnblogs.com/kaikai/aggbug/1594380.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/11/02/1594380.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/11/02/1594380.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>宅电脑桌</title><link>http://www.cnblogs.com/kaikai/archive/2009/10/20/1587185.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Tue, 20 Oct 2009 15:39:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/10/20/1587185.html</guid><description><![CDATA[<p>阅读: 100 评论: 3 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-10-20 23:39 <a href="http://www.cnblogs.com/kaikai/archive/2009/10/20/1587185.html" target="_blank">原文链接</a></p><p>突发奇想,躺着用电脑是啥感觉?<br />于是涂鸦了一个桌子.你可以把电脑安放在上面.躺好后把脚跟的桌子拉到正上方.</p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/kaikai/beddesk.png" border="0" /></p>
<p>&nbsp;</p><img src="http://www.cnblogs.com/kaikai/aggbug/1587185.html?type=1" width="1" height="1" alt=""/><p>评论: 3　<a href="http://www.cnblogs.com/kaikai/archive/2009/10/20/1587185.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/10/20/1587185.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>动作游戏自定义技能探讨</title><link>http://www.cnblogs.com/kaikai/archive/2009/10/17/1585261.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Sat, 17 Oct 2009 13:47:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/10/17/1585261.html</guid><description><![CDATA[<p>阅读: 39 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-10-17 21:47 <a href="http://www.cnblogs.com/kaikai/archive/2009/10/17/1585261.html" target="_blank">原文链接</a></p><div>kaikai 21:18:46</div><div>最近对格斗类的游戏感兴趣</div><div>kaikai 21:19:06</div><div>想做格斗过关的游戏：）</div><div>下雨了... 21:19:09</div><div>格斗游戏是指类似KOF ？</div><div>下雨了... 21:19:30</div><div>合金弹头那种过关游戏？</div><div>kaikai 21:19:42</div><div>差不多。</div><div>下雨了... 21:20:30</div><div>我记得好像有玩过类似的别人制作的游戏 和魂斗罗差不多</div><div>kaikai 21:20:56</div><div>主要是动作游戏。再增加格斗方面的内容。</div><div>玩家能选择的动作以及动作的组合方式多而灵活。</div><div>kaikai 21:21:09</div><div>这样玩家可以发挥一些创造性</div><div>下雨了... 21:22:07</div><div>额 听起好像小时候玩红白机的游戏</div><div>kaikai 21:23:15</div><div>恩</div><div>kaikai 21:23:28</div><div>忍者龙剑传~</div><div>下雨了... 21:24:10</div><div>哦 那个有玩过</div><div>kaikai 21:24:16</div><div>甚至连<span style="color: red; ">玩家的动作本身也可以让玩家自己来定义。</span></div><div>下雨了... 21:24:41</div><div>这个就困难点了吧</div><div>kaikai 21:27:29</div><div>我还在构思中。<span style="color: red; ">如果把动作拆为一些元素，元素之间有一些相互限制条件，然后交给玩家。</span>应该是可以自定义的。只是要事先预知玩家能获得的动作不至于太夸张，远远超出了关卡设置的难度就不好玩了。</div><div>下雨了... 21:28:08</div><div>恩 这也是个办法</div><div>kaikai 21:30:20</div><div><span style="color: red; ">动作元素可以是移动（如跳跃、平移、加速平移、瞬移等）、伤害（伤害范围、伤害类型、杀伤力等）、动画（预先设计了若干的动画，根据玩家选择的移动方式做一定的过滤，余下的可以任意选择）等等。</span></div><div>下雨了... 21:30:58</div><div>那样的也不错啊 就像是自己制作出的人一样</div><div>kaikai 21:30:58</div><div>哦，还有声音</div><div>kaikai 21:32:38</div><div><span style="color: red; ">限制条件，比如玩家需要在游戏中收集某种物品，设计动作时不同的元素将消耗不同的的该物品。</span></div><div>kaikai 21:33:08</div><div><span style="color: red; ">这使得玩家无法一下子获得很强的动作。但越玩角色能力越强</span></div><div>下雨了... 21:33:13</div><div>恩&nbsp;</div><div>下雨了... 21:33:43</div><div>也就类似RPG游戏 升级加力量</div><div>kaikai 21:36:30</div><div>对。只不过这里获得的能力需要玩家在实时的游戏过程中随机应变的使用。如果是回合制则这些能力将偏向于计算而不是运动直觉。</div><div>玩家大致可以在这个维度上分2类，一种是依靠直觉的，一种是依靠理性计算和推理的。前者力求游戏过程的流畅和节奏带来的爽快感。后者则享受运筹帷幄的满足感</div><div>下雨了... 21:37:26</div><div>恩 可是说起来容易 做起来应该不简单吧</div><div>kaikai 21:37:28</div><div>相比之下大部分玩家应该是属于前者的，因为后者上手难度高。</div><div>kaikai 21:37:32</div><div>对</div><div>kaikai 21:38:29</div><div>我现在只是信口说一通。真的要实现出这个系统，肯定会遇到很多细节的困难问题。</div><img src="http://www.cnblogs.com/kaikai/aggbug/1585261.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/10/17/1585261.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/10/17/1585261.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>TFS如何跨分支合并未签入的文件</title><link>http://www.cnblogs.com/kaikai/archive/2009/09/17/1568746.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Thu, 17 Sep 2009 12:06:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/09/17/1568746.html</guid><description><![CDATA[<p>阅读: 110 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-09-17 20:06 <a href="http://www.cnblogs.com/kaikai/archive/2009/09/17/1568746.html" target="_blank">原文链接</a></p><p><span style="font-family: 宋体">昨天晚上单刷噩梦汜水关。毁了</span>2<span style="font-family: 宋体">套武器，吃了无数的药和大力丸，耗尽复活币。终于干掉了华雄。<br /></span><span style="font-family: 宋体">同时也想到了如何将一个分支上暂时不能签入但又需要转移到其它分支上的大量代码妥善转移的方法。</span></p>
<p><strong><span>1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-family: 宋体">获取文件清单</span></strong></p>
<p><span style="font-family: 宋体">首先，在</span>vs<span style="font-family: 宋体">中打开<strong><span style="color: red">挂起的更改</span></strong>窗口：视图</span>-&gt;<span style="font-family: 宋体">其它窗口</span>-&gt;<span style="font-family: 宋体">挂起的更改<br /></span><span style="font-family: 宋体">选中要转移的文条件，然后点<span style="color: red">搁置</span>，填写<span style="color: red">搁置集名称</span>，然后去掉<span style="color: red">在本地保留挂起的更改</span>选项，点<span style="color: red">搁置</span>确认。<br />&nbsp; </span><span style="color: red; font-family: 宋体">注意，此时本地挂起的更改都已经被撤销了。</span></p>
<p>&nbsp;<span style="font-family: 宋体">回到<strong><span style="color: red">挂起的更改</span></strong>窗口，选择<span style="color: red">取消搁置</span>，在<span style="color: red">取消搁置</span>窗口的<span style="color: red">结果</span>列表中选中刚才的搁置集，并点<span style="color: red">取消搁置</span>确认。</span></p>
<p>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">此时刚才搁置的文件又回到了本地。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">然后，打开<strong><span style="color: red">输出</span></strong>窗口：视图</span>-&gt;<span style="font-family: 宋体">输出<br /></span><span style="font-family: 宋体">在<span style="color: red">显式以下输出</span>中选择<span style="color: red">源代码管理</span></span><span style="color: red"> &#8211; Team Foundation<br /></span><span style="font-family: 宋体">可以看到一串形如：</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">取消对</span> $/project<span style="color: #00b0f0">/&#8230;/*.* </span><span style="font-family: 宋体">的更改的搁置</span></p>
<p><span style="font-family: 宋体">的文件清单，将所有这些清单剪切到你熟悉的文本编辑器，把头尾部分去除，只保留分支内的目录<br /></span></p>
<p><span style="font-family: 宋体">如橙色部分：</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">取消对</span> $/project/Sources-branch-0.0.62/<strong><u><span style="color: #ffc000">GameEngine/fsm/state.cpp</u></strong></span><span style="font-family: 宋体">的更改的搁置</span></p>
<p><span style="font-family: 宋体">将整个清单剪贴备用。</span></p>
<p>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><strong><span>2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-family: 宋体">合并代码</span></strong></p>
<p><span style="font-family: 宋体">获取需要转移的目标分支（建议获取最新版本的代码，避免多次合并）</span></p>
<p><span style="font-family: 宋体">用</span>Beyond Compare 3<span style="font-family: 宋体">比较两个分支目录。</span></p>
<p><span style="font-family: 宋体">在</span>Beyond Compare<span style="font-family: 宋体">中选择</span>File Filters<br /><span style="font-family: 宋体">把剪贴板上的文件清单贴在</span>Include files<span style="font-family: 宋体">内<br /></span>Beyond Compare<span style="font-family: 宋体">内选择</span>Show No Orphans<span style="font-family: 宋体">，</span>Only Compare Files&nbsp;</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">此时仅列出所有原本挂起的更改文件。</span></p>
<p><span style="font-family: 宋体">手动确认和合并你做出的修改。<span style="color: red">请注意，这里需要格外仔细！<br /></span></span><span style="color: red; font-family: 宋体">因为是</span><span style="color: red">2</span><span style="color: red; font-family: 宋体">个不同分支的代码，</span><span style="color: red">BeyondCompare</span><span style="color: red; font-family: 宋体">列出的不同的地方不仅仅是你要做的修改。<br /></span>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><strong><span>3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-family: 宋体">签出目标代码</span></strong></p>
<p><span style="font-family: 宋体">在目标代码下建立</span>checkout.bat<span style="font-family: 宋体">文件，内容如下</span></p>
<p style="margin: 0cm 0cm 0pt 10.5pt">call &#8220;%VS80COMNTOOLS%vsvars32.bat&#8221;</p>
<p style="margin: 0cm 0cm 0pt 10.5pt">for /F &#8220;&#8221; %%i in(<span style="color: red">filelist.txt) do tf checkout %%i</span></p>
<p><span style="font-family: 宋体">建立</span>filelist.txt<span style="font-family: 宋体">，内容是刚才剪贴板的文件清单。<br /></span><span style="font-family: 宋体">然后双击</span>checkout.bat<span style="font-family: 宋体">运行后签出所有清单内的文件。<br /></span>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><strong><span>4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-family: 宋体">最后签入</span></strong></p>
<p><span style="font-family: 宋体">建议你再</span>review<span style="font-family: 宋体">一下所有要签入的文件。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">谢谢你阅读完整个过程！<br /></span>kaikai<br /></p><img src="http://www.cnblogs.com/kaikai/aggbug/1568746.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/09/17/1568746.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/09/17/1568746.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>友元接口-限制你的友元类数量</title><link>http://www.cnblogs.com/kaikai/archive/2009/09/08/1562463.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Tue, 08 Sep 2009 05:01:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/09/08/1562463.html</guid><description><![CDATA[<p>阅读: 74 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-09-08 13:01 <a href="http://www.cnblogs.com/kaikai/archive/2009/09/08/1562463.html" target="_blank">原文链接</a></p><p><span class="Apple-style-span" style="font-family: 宋体; "><span class="Apple-style-span" style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: 13px; line-height: normal; white-space: pre; ">友元接口-</span>限制你的友元类数量</span></p><p>&nbsp;</p><p><span style="font-family: 宋体">在写C++程序时，也许你遇到过这样的情况：<br /></span><span style="font-family: 宋体">在一个类有一组策略，而且这组策略的实现都需要访问</span>A<span style="font-family: 宋体">的一些成员，而且这些成员并不希望被其它类所访问。<br /></span><span style="font-family: 宋体">一般这些成员被期望设置为保护或者私有的，并且这组策略被当作这个类</span>A<span style="font-family: 宋体">的友元类。如：</span></p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_125819" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_125819').style.display='none'; document.getElementById('Code_Open_Image_125819').style.display='inline'; document.getElementById('Code_Open_Text_125819').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" style="display: none; "><img id="Code_Open_Image_125819" style="display: inline; " onclick="this.style.display='none'; document.getElementById('Code_Open_Text_125819').style.display='none'; getElementById('Code_Closed_Image_125819').style.display='inline'; getElementById('Code_Closed_Text_125819').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_125819" style="display: none; ">Code</span><span id="Code_Open_Text_125819" style="display: inline; "><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Strategy1;<br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Strategy2;<br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Strategy3;<br /><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;A<br /></span><span style="color: #000000">{<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Strategy1;<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Strategy2;<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Strategy3;<br /></span><span style="color: #0000ff">private</span><span style="color: #000000">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;_foo();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_bar;<br /></span><span style="color: #000000">};</span></span></div>
<p><span style="font-family: 宋体">现在，假如你需要添加新的策略</span>Strategy4<span style="font-family: 宋体">为了维持这种微妙的关系，你需要把</span>Strategy4<span style="font-family: 宋体">添加为类</span>A<span style="font-family: 宋体">的新的友元类。<br /></span><span style="font-family: 宋体">随着策略的增加，这个过程不断扩展</span>A<span style="font-family: 宋体">的友元类，最终你恐怕不会喜欢你看到的代码。并且由于每次增加策略都需要使得依赖</span>A<span style="font-family: 宋体">的代码重新编译，这里一定有什么不妥之处。</span></p>
<p><span style="font-family: 宋体">我想到一种解决方法，可以让你的代码看上去不算太混乱。<br /></span><span style="font-family: 宋体">首先，既然这组策略以相似的情况出现在</span>A<span style="font-family: 宋体">的周围，那么它们可能有相似之处。比如它们可能需要访问</span>A<span style="font-family: 宋体">的同一部分成员。<br /></span><span style="font-family: 宋体">那么假如通过一个代理类来访问这些成员，那么这组策略就不必都是</span>A<span style="font-family: 宋体">的友元，只要这个代理是</span>A<span style="font-family: 宋体">的友元即可。<br /></span><span style="font-family: 宋体">这个代理我称之为友元接口。</span><span style="font-family: 宋体"></span></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_130013" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_130013').style.display='none'; document.getElementById('Code_Open_Image_130013').style.display='inline'; document.getElementById('Code_Open_Text_130013').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_130013" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_130013').style.display='none'; getElementById('Code_Closed_Image_130013').style.display='inline'; getElementById('Code_Closed_Text_130013').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_130013">Code</span><span id="Code_Open_Text_130013" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;IFriendA_Strategy;<br /><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;A<br /></span><span style="color: #000000">{<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;IFriendA_Strategy;<br /></span><span style="color: #0000ff">private</span><span style="color: #000000">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;_foo();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_foo2(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_bar;<br /></span><span style="color: #000000">};<br /><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;IFriendA_Strategy<br /></span><span style="color: #000000">{<br /></span><span style="color: #0000ff">protected</span><span style="color: #000000">:<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;IFriendA_Strategy&nbsp;Friend;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;统一友元接口的访问方式<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;想必这组函数的实现不必给出了吧</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;_foo(A</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;rA);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_foo2(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;A</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;rA,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;get_bar(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;A</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;rA);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;set_bar(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;A</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;rA,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;value);<br /></span><span style="color: #000000">};<br /><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Strategy1&nbsp;:&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;IFriendA_Strategy<br /></span><span style="color: #000000">{<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;x(A&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">ra,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p)<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;于是你可以访问了</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Friend::_foo(ra);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;f&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Friend::_foo2(ra,&nbsp;p);<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Friend::set_bar(ra,&nbsp;Friend::get_bar(ra)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;f);<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #000000">};<br /></span></span></div>
<p>&nbsp;</p>
<p>如此一来，既完成了友元关系，又减少了依赖关系。<br /><span style="font-family: 宋体">缺点在于代码不具备防御性，非授权类可以轻易的获得访问</span>A<span style="font-family: 宋体">保护成员的能力。只需要从友元接口继承即可。<br /></span><span style="font-family: 宋体">这里再进一步可以看到，如果类</span>A<span style="font-family: 宋体">有多组不同方面的策略，这些策略需要访问</span>A<span style="font-family: 宋体">的成员的不同子集，那么它们可以独立的归到各自的友元接口上，互不相干。</span></p>
<p>kaikai</p><p>ps. 发现被转载了，没带上链接，而且还被分类到java版块。特此在内容中做一些改动：标明语言c++</p><img src="http://www.cnblogs.com/kaikai/aggbug/1562463.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/09/08/1562463.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/09/08/1562463.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>g++上c++模板与padding交互产生的陷阱</title><link>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529382.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Thu, 23 Jul 2009 06:21:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529382.html</guid><description><![CDATA[<p>阅读: 51 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-07-23 14:21 <a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529382.html" target="_blank">原文链接</a></p>&nbsp; 
<p class="MsoNormal"><span style="font-family: 宋体">关于</span><span lang="EN-US">Padding</span><span style="font-family: 宋体">，请看下面的代码：</span><span style="font-family: 宋体"></p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">#pragma</span><span style="color: #000000">&nbsp;pack(1)</span><span style="color: #000000"><br /></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;A<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i;<br />};<br /></span><span style="color: #0000ff">#pragma</span><span style="color: #000000">&nbsp;pack()</span><span style="color: #000000"><br /></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;A2<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i;<br />};<br /></span></div>
<p class="MsoNormal">我们可以</span><span lang="EN-US">assert:</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体"></p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">assert(</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(A)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">);<br />assert(</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(A2)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">8</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;假设32位编译环境</span><span style="color: #008000"><br /></span></div>
<p class="MsoNormal">这里的</span><span lang="EN-US">padding</span><span style="font-family: 宋体">大小我们基本都可以预测。<br /></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">由于</span><span lang="EN-US">c++</span><span style="font-family: 宋体">模板的代码生成规则，下面的代码可能不会注意到</span><span style="font-family: 宋体"></p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">template</span><span style="color: #000000">&lt;</span><span style="color: #000000">typename&nbsp;T</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;BT<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a;<br />};<br /><br /></span><span style="color: #0000ff">#pragma</span><span style="color: #000000">&nbsp;pack(1)</span><span style="color: #000000"><br /></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;B<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BT&nbsp;b;<br />};<br /><br /></span><span style="color: #0000ff">#pragma</span><span style="color: #000000">&nbsp;pack()</span><span style="color: #000000"><br /></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;B2<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BT&nbsp;b;<br />};<br /></span></div>
<p class="MsoNormal">这时</span><span lang="EN-US">sizeof(B2)</span><span style="font-family: 宋体">以及</span><span lang="EN-US">B2::b</span><span style="font-family: 宋体">的偏移地址是多少？<br /></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">struct BT</span><span style="font-family: 宋体">第一次被实例化是在</span><span lang="EN-US">struct B</span><span style="font-family: 宋体">内，且此时的</span><span lang="EN-US">pack</span><span style="font-family: 宋体">为</span><span lang="EN-US">1.</span><span style="font-family: 宋体">于是该类的</span><span lang="EN-US">alienment</span><span style="font-family: 宋体">也被当作</span><span lang="EN-US">1</span><span style="font-family: 宋体">来处理<br /></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">到后面的</span><span lang="EN-US">B2</span><span style="font-family: 宋体">内，虽然</span><span lang="EN-US">pack</span><span style="font-family: 宋体">已经恢复（为</span><span lang="EN-US">4</span><span style="font-family: 宋体">）但</span><span lang="EN-US">b</span><span style="font-family: 宋体">的</span><span lang="EN-US">alienment</span><span style="font-family: 宋体">值仍然为</span><span lang="EN-US">1</span><span style="font-family: 宋体">，于是</span><span lang="EN-US">sizeof(B2)==5</span><span style="font-family: 宋体">而</span><span lang="EN-US">B2::b</span><span style="font-family: 宋体">的偏移为</span><span lang="EN-US">1</span><span style="font-family: 宋体">而不是</span><span lang="EN-US">4</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">注意：在</span><span lang="EN-US">vc</span><span style="font-family: 宋体">上，这个</span><span lang="EN-US">sizeof(B2)==8</span><span style="font-family: 宋体">，</span><span lang="EN-US">B2::b</span><span style="font-family: 宋体">的偏移为</span><span lang="EN-US">4</span><span style="font-family: 宋体">，仍然是我们所期望的。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p><img src="http://www.cnblogs.com/kaikai/aggbug/1529382.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529382.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529382.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>卡马克的求平方根函数代码的陷阱</title><link>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529379.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Thu, 23 Jul 2009 06:19:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529379.html</guid><description><![CDATA[<p>阅读: 124 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-07-23 14:19 <a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529379.html" target="_blank">原文链接</a></p>&nbsp;<span style="font-family: 宋体">首先感谢xq</span><span lang="EN-US">; lj</span><span style="font-family: 宋体">定位问题！</span> 
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span><span style="font-family: 宋体">问题出在我签入的来自卡马克的求平方根函数代码。<br /></span><span lang="EN-US"></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_143031" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_143031').style.display='none'; document.getElementById('Code_Open_Image_143031').style.display='inline'; document.getElementById('Code_Open_Text_143031').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_143031" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_143031').style.display='none'; getElementById('Code_Closed_Image_143031').style.display='inline'; getElementById('Code_Closed_Text_143031').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_143031">Code</span><span id="Code_Open_Text_143031" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">double</span><span style="color: #000000"> InvSqrt(</span><span style="color: #0000ff">double</span><span style="color: #000000"> number)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__int64 i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000"> x2, y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000"> </span><span style="color: #0000ff">double</span><span style="color: #000000"> threehalfs </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">1.5F</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2 </span><span style="color: #000000">=</span><span style="color: #000000"> number </span><span style="color: #000000">*</span><span style="color: #000000"> </span><span style="color: #800080">0.5F</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y </span><span style="color: #000000">=</span><span style="color: #000000"> number;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red">i </span><span style="color: red">=</span><span style="color: #000000"> </span><span style="color: red">*</span><span style="color: red">(__int64 </span><span style="color: red">*</span><span style="color: red">)</span><span style="color: red">&amp;</span><span style="color: red">y;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">0x5fe6ec85e7de30da</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000"> (i </span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000"> </span><span style="color: #800080">1</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red">y&nbsp;</span><span style="color: red">=</span><span style="color: #000000">&nbsp;</span><span style="color: red">*</span><span style="color: red">( </span><span style="color: red">double</span><span style="color: #000000"> </span><span style="color: red">*</span><span style="color: red">)</span><span style="color: red">&amp;</span><span style="color: red">i;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;y </span><span style="color: #000000">*</span><span style="color: #000000"> (threehalfs </span><span style="color: #000000">-</span><span style="color: #000000"> (x2 </span><span style="color: #000000">*</span><span style="color: #000000"> y </span><span style="color: #000000">*</span><span style="color: #000000"> y)); </span><span style="color: #008000">//</span><span style="color: #008000">1st iteration</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;y </span><span style="color: #000000">*</span><span style="color: #000000"> (threehalfs </span><span style="color: #000000">- </span><span style="color: #000000">(x2 </span><span style="color: #000000">*</span><span style="color: #000000"> y </span><span style="color: #000000">*</span><span style="color: #000000"> y)); </span><span style="color: #008000">//</span><span style="color: #008000">2nd iteration, this can be removed</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;y;<br />}<br /></span></span></div></span>
<p class="MsoNormal"><span style="font-family: 宋体">红色部分代码在</span><span lang="EN-US">gcc</span><span style="font-family: 宋体">开启</span><span lang="EN-US">-fstrict-aliasing</span><span style="font-family: 宋体">选项后将得到错误的代码。由于使用了</span><span lang="EN-US">type-punned pointer</span><span style="font-family: 宋体">将打破</span><span lang="EN-US">strict-aliasing</span><span style="font-family: 宋体">规则。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">由于</span><span lang="EN-US">-fstrict-aliasing</span><span style="font-family: 宋体">选项在</span><span lang="EN-US">-O2, -O3, -Os</span><span style="font-family: 宋体">等优化模式下都将开启（目前</span><span lang="EN-US">dev</span><span style="font-family: 宋体">不带优化，</span><span lang="EN-US">main</span><span style="font-family: 宋体">带</span><span lang="EN-US">-O3</span><span style="font-family: 宋体">所以该问题只在</span><span lang="EN-US">main</span><span style="font-family: 宋体">上出现）所以建议对</span><span lang="EN-US">linux</span><span style="font-family: 宋体">编译中产生<br /></span><span lang="EN-US">warning: dereferencing type-punned pointer will break strict-aliasing rule<br /></span><span style="font-family: 宋体">警告的情况作为编译失败。以便防止出现类似问题。<br /></span><span style="font-family: 宋体">上述代码应当使用联合体重写为：</span><span style="font-family: 宋体"></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_144952" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_144952').style.display='none'; document.getElementById('Code_Open_Image_144952').style.display='inline'; document.getElementById('Code_Open_Text_144952').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_144952" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_144952').style.display='none'; getElementById('Code_Closed_Image_144952').style.display='inline'; getElementById('Code_Closed_Text_144952').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_144952">Code</span><span id="Code_Open_Text_144952" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">double</span><span style="color: #000000"> InvSqrt(</span><span style="color: #0000ff">double</span><span style="color: #000000"> number)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000"> x2, y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000"> </span><span style="color: #0000ff">double</span><span style="color: #000000"> threehalfs </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">1.5F</span><span style="color: #000000">;<br /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;union<br /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red">double</span><span style="color: red">&nbsp;d;<br /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__int64&nbsp;i;<br /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}d;</span><span style="color: red"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2 </span><span style="color: #000000">=</span><span style="color: #000000"> number </span><span style="color: #000000">*</span><span style="color: #000000"> </span><span style="color: #800080">0.5F</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y = </span><span style="color: #000000">number;<br /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.d&nbsp;</span><span style="color: red">=</span><span style="color: red">&nbsp;&nbsp;y;<br /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.i&nbsp;</span><span style="color: red">=</span><span style="color: #000000">&nbsp;</span><span style="color: red">0x5fe6ec85e7de30da</span><span style="color: #000000"> </span><span style="color: red">-</span><span style="color: red"> (d.i </span><span style="color: red">&gt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: red">1</span><span style="color: red">);<br /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y </span><span style="color: red">=</span><span style="color: red"> d.d;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y </span><span style="color: #000000">=</span><span style="color: #000000"> y </span><span style="color: #000000">*</span><span style="color: #000000"> (threehalfs </span><span style="color: #000000">-</span><span style="color: #000000"> (x2 </span><span style="color: #000000">*</span><span style="color: #000000"> y </span><span style="color: #000000">*</span><span style="color: #000000"> y)); </span><span style="color: #008000">//</span><span style="color: #008000">1st iteration</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y </span><span style="color: #000000">=</span><span style="color: #000000"> y </span><span style="color: #000000">*</span><span style="color: #000000"> (threehalfs </span><span style="color: #000000">- </span><span style="color: #000000">(x2 </span><span style="color: #000000">*</span><span style="color: #000000"> y </span><span style="color: #000000">*</span><span style="color: #000000"> y)); </span><span style="color: #008000">//</span><span style="color: #008000">2nd iteration, this can be removed</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000"> y;<br />}</span></span></div>
<p class="MsoNormal">这样就不会打破该规则。<br /><span style="font-family: 宋体"><br />什么是</span><span class="MsoHyperlink"><span lang="EN-US" style="color: windowtext; text-decoration: none; text-underline: none">Strict Aliasing</span></span><span class="MsoHyperlink"><span style="color: windowtext; font-family: 宋体; text-decoration: none; text-underline: none">？请看：</span></span><span lang="EN-US" style="color: #1f497d"><a href="http://www.cellperformance.com/mike_acton/2006/06/understanding_strict_aliasing.html">http://www.cellperformance.com/mike_acton/2006/06/understanding_strict_aliasing.html</a>?<o:p></o:p></span></p>
<p class="MsoNormal"><strong><span lang="EN-US" style="color: red">In C99, it is <em>illegal</em> to create an alias of a different type than the original.<o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="color: #1f497d; font-family: 宋体">在我们现在的代码中</span><span style="color: #1f497d; font-family: 宋体">可以按正则表达式</span><span lang="EN-US" style="color: red">\([^()]+\*:b*\):b*&amp;</span><span style="color: #1f497d; font-family: 宋体">找到约</span><strong><span lang="EN-US" style="color: red">180</span></strong><span style="color: #1f497d; font-family: 宋体">个匹配行，涉及</span><strong><span lang="EN-US" style="color: red">60</span></strong><span style="color: #1f497d; font-family: 宋体">个文件。<br /></span><span style="color: #1f497d; font-family: 宋体">这其中应该有一些是不符合这个</span><span lang="EN-US" style="color: #1f497d">strict-aliasing</span><span style="color: #1f497d; font-family: 宋体">要求的。<br /></span><span style="color: #1f497d; font-family: 宋体">处理方法<br /></span><span lang="EN-US" style="color: #1f497d">1</span><span style="color: #1f497d; font-family: 宋体">是临时关闭</span><span lang="EN-US" style="color: #1f497d">strict-aliasing</span><span style="color: #1f497d; font-family: 宋体">选项：在使用</span><span lang="EN-US" style="color: #1f497d">-O2, -O3, -Os</span><span style="color: #1f497d; font-family: 宋体">编译的情况下使用</span><span lang="EN-US" style="color: #1f497d">-fno-strict-aliasing</span><span style="color: #1f497d; font-family: 宋体">关闭</span><span lang="EN-US" style="color: #1f497d">strict-aliasing<br /></span><span lang="EN-US" style="color: #1f497d">2</span><span style="color: #1f497d; font-family: 宋体">是要修改这类不满足该限制的代码，在完全修改完毕之后再打开。<br /></span><span style="color: #1f497d; font-family: 宋体">要注意到，</span><span lang="EN-US" style="color: #1f497d">strict-aliasing</span><span style="color: #1f497d; font-family: 宋体">选项提示编译器代码满足这个限制，所以可以提供编译器进行额外的代码优化的机会。</span></span></p><img src="http://www.cnblogs.com/kaikai/aggbug/1529379.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529379.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529379.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>[zt]调试的时候，无法设置数据断点（为灰色）</title><link>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529376.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Thu, 23 Jul 2009 06:16:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529376.html</guid><description><![CDATA[<p>阅读: 58 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-07-23 14:16 <a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529376.html" target="_blank">原文链接</a></p><p><span style="color: #1f497d; font-family: 'Calibri','sans-serif'">1<span style="color: #1f497d; font-family: 宋体">：</span></span><span style="color: #1f497d; font-family: 宋体">代码不一致（编译）<br /></span><span style="color: #1f497d; font-family: 'Calibri','sans-serif'">2</span><span style="color: #1f497d; font-family: 宋体">：内存不够用了（看看那个进程占了这么多）<br /></span><span style="color: #1f497d; font-family: 'Calibri','sans-serif'">3</span><span style="color: #1f497d; font-family: 宋体">：符号文件被其他进程锁住了（一般是多个</span><span style="color: #1f497d; font-family: 'Calibri','sans-serif'">vs</span><span style="color: #1f497d; font-family: 宋体">造成的，把</span><span style="color: #1f497d; font-family: 'Calibri','sans-serif'">VS</span><span style="color: #1f497d; font-family: 宋体">关掉，检查是否有</span><span style="color: #1f497d; font-family: 'Calibri','sans-serif'">devenv.exe/mspdbsrv.exe</span><span style="color: #1f497d; font-family: 宋体">死进程）<br />by 教练</span></p><img src="http://www.cnblogs.com/kaikai/aggbug/1529376.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529376.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529376.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>[zt]关闭VS自带的提示</title><link>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529370.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Thu, 23 Jul 2009 06:09:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529370.html</guid><description><![CDATA[<p>阅读: 35 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-07-23 14:09 <a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529370.html" target="_blank">原文链接</a></p>&nbsp;
<p><span style="font-size: 9pt; font-family: 宋体">使用</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">VA</span><span style="font-size: 9pt; font-family: 宋体">后</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">因为要在一台机器上调试客户端和服务器</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">之前一直卡到不行</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">.<br /></span><span style="font-size: 9pt; font-family: 宋体">后面找到方法</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">关闭</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">vs2005</span><span style="font-size: 9pt; font-family: 宋体">自带的提示功能</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">这样速度会快不少</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,<br /></span><span style="font-size: 9pt; font-family: 宋体">具体方法很简单</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">把<br /></span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">..\Miscrosoft Visual Studio 8\VC\Vcpackages\feacp.dll </span><span style="font-size: 9pt; font-family: 宋体">删除或者改名即可<br /><br />by 万hb</span></p><img src="http://www.cnblogs.com/kaikai/aggbug/1529370.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529370.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529370.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>vs偶尔出现链接时间过长的情况的临时处理方法</title><link>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529369.html</link><dc:creator>kaikai</dc:creator><author>kaikai</author><pubDate>Thu, 23 Jul 2009 06:08:00 GMT</pubDate><guid>http://www.cnblogs.com/kaikai/archive/2009/07/23/1529369.html</guid><description><![CDATA[<p>阅读: 93 评论: 0 作者: <a href="http://www.cnblogs.com/kaikai/" target="_blank">kaikai</a> 发表于 2009-07-23 14:08 <a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529369.html" target="_blank">原文链接</a></p>&nbsp; 
<p><span style="font-size: 9pt; font-family: 宋体">仿佛</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">.ilk</span><span style="font-size: 9pt; font-family: 宋体">文件超过了</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">200</span><span style="font-size: 9pt; font-family: 宋体">兆就会造成增量链接失败</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">链接时提示如下</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">:<span style="color: blue"></span></span></p>
<p><span style="font-size: 9pt; color: blue; font-family: 'Arial','sans-serif'">LINK: warning LNK4076:</span><span style="font-size: 9pt; color: blue; font-family: 宋体">无效的增量状态文件</span><span style="font-size: 9pt; color: blue; font-family: 'Arial','sans-serif'">&#8221;xxx.ilk&#8221;;</span><span style="font-size: 9pt; color: blue; font-family: 宋体">正在非增量链接</span></p>
<p><span style="font-size: 9pt; font-family: 宋体">尚不知道如何避免</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">临时处理方法是添加一个预生成事件</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">当增量链接文件大于</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">200</span><span style="font-size: 9pt; font-family: 宋体">兆就先删除它再继续生成</span></p>
<p><span style="font-size: 9pt; font-family: 宋体">具体操作方法如下</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">:</span></p>
<p><span style="font-size: 9pt; font-family: 宋体">选中出现该情况的项目</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">,</span><span style="font-size: 9pt; font-family: 宋体">编辑它的属性</span></p>
<p><span style="font-size: 9pt; color: red; font-family: 宋体">配置属性</span><span style="font-size: 9pt; color: red; font-family: 'Arial','sans-serif'">-&gt;</span><span style="font-size: 9pt; color: red; font-family: 宋体">生成事件</span><span style="font-size: 9pt; color: red; font-family: 'Arial','sans-serif'">-&gt;</span><span style="font-size: 9pt; color: red; font-family: 宋体">预生成事件</span><span style="font-size: 9pt; color: red; font-family: 'Arial','sans-serif'">-&gt;</span><span style="font-size: 9pt; color: red; font-family: 宋体">命令行</span></p>
<p><strong><span style="font-size: 9pt; font-family: 宋体">for /R $(OutDir) %%i in ($(TargetName).ilk) do if /i %%~zi GTR 200000000 (del %%~fi)</span></strong></p>
<p><span style="font-size: 9pt; font-family: 宋体">说明中可以填写一个提示,比如:</span> <span style="font-size: 9pt; font-family: 宋体">当增量链接文件大于</span><span style="font-size: 9pt; font-family: 'Arial','sans-serif'">200</span><span style="font-size: 9pt; font-family: 宋体">兆就先删除它再继续生成</span></p><img src="http://www.cnblogs.com/kaikai/aggbug/1529369.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529369.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kaikai/archive/2009/07/23/1529369.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56793/" target="_blank">知名扩展 Firebug 的简化版登陆 Chrome</a><span style="color:gray">(2010-02-09 22:59)</span><br/>· <a href="http://news.cnblogs.com/n/56792/" target="_blank">Google 悄悄地启用 1e100.net，打枪地不要</a><span style="color:gray">(2010-02-09 22:57)</span><br/>· <a href="http://news.cnblogs.com/n/56791/" target="_blank">从 Google 代码库找到的好东西</a><span style="color:gray">(2010-02-09 22:46)</span><br/>· <a href="http://news.cnblogs.com/n/56789/" target="_blank">苹果在线商店临时关闭 或将推新Macbook</a><span style="color:gray">(2010-02-09 22:39)</span><br/>· <a href="http://news.cnblogs.com/n/56788/" target="_blank">豆瓣网推出豆瓣电台iPhone客户端</a><span style="color:gray">(2010-02-09 21:51)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56782/" target="_blank">2010年2月编程语言排行榜</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>