﻿<?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++博客-Fun In C++</title><link>http://www.cppblog.com/HienChu/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:40:00 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:40:00 GMT</pubDate><ttl>60</ttl><item><title>杂七杂八——Name与x:Name的关系 （转载）</title><link>http://www.cppblog.com/HienChu/archive/2011/07/16/151172.html</link><dc:creator>HienChu</dc:creator><author>HienChu</author><pubDate>Sat, 16 Jul 2011 08:42:00 GMT</pubDate><guid>http://www.cppblog.com/HienChu/archive/2011/07/16/151172.html</guid><wfw:comment>http://www.cppblog.com/HienChu/comments/151172.html</wfw:comment><comments>http://www.cppblog.com/HienChu/archive/2011/07/16/151172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/HienChu/comments/commentRss/151172.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/HienChu/services/trackbacks/151172.html</trackback:ping><description><![CDATA[<p><em>很不错的文章，相信很多人都被这个问题困扰过<br /><br /></em><strong style="color: #ff0000; font-size: 10pt">以下内容转载自</strong><a style="color: #ff0000; font-size: 10pt" href="http://blog.csdn.net/FantasiaX/article/details/3499767"><strong>http://blog.csdn.net/FantasiaX/article/details/3499767</strong></a><strong style="color: #ff0000; font-size: 10pt">，版权归作者所有<br /></strong></p>
<h1 style="font-size: 16pt">杂七杂八&#8212;&#8212;Name与x:Name的关系</h1>
<p>&nbsp;</p>
<h2 style="font-size: 12pt">小序：</h2>
<p>&nbsp;</p>
<p>如果想用Google搜包含冒号的内容怎么办？比如我想搜x:Name这个字符串&#8230;&#8230;</p>
<p>原来，应该是这样&#8212;&#8212;x::Name</p>
<p>这世道，连搜索也要加转义，全民程序员，要不要人活了？</p>
<p>&nbsp;</p>
<h2 style="font-size: 12pt">正文：</h2>
<p>&nbsp;</p>
<p>从第一天学习XAML语言开始，我就一直没分清为什么对于一个XAML标签既可以设置它的Name又可以设置它的x:Name。问过一些同事，大家好像对这种比较孔乙己的问题不太感兴趣。今天花了些时间看了看，收获还挺多的。与大家分享一下。</p>
<p>&nbsp;</p>
<p>首先，让我们剖析一下XAML代码与C#代码之间的关系。</p>
<p>&nbsp;</p>
<p>大家都知道，XAML是&#8220;用来设计UI&#8221;的，设计师用XAML设计出来的UI其后台代码（程序逻辑）可以由程序员用C#或者VB去写&#8212;&#8212;这叫做Code-behind。实际上，设计师用XAML和程序用C#都是在构建同一个类，换句话说就是：把一个类劈成两半，与UI相关的那半由设计师用XAML写，与逻辑相关的那半由程序员用C#写。</p>
<p>&nbsp;</p>
<p>.NET之所以支持这种劈开写的功能，得益于partial这个关键字。请大家看这两段代码</p>
<p>&nbsp;</p>
<div class="highlighter">
<ol class="highlighter-c"><li><span class="comment">// For UI </span></li><li class="alt"><span class="keyword">public</span> partial <span class="keyword">class</span> Car</li><li>{</li><li class="alt">Color bodyColor;</li><li>Color windowColor;</li><li class="alt">Polygon door;</li><li>Polygon seat;</li><li class="alt">}</li><li class="alt"><span class="comment">// For logic </span></li><li><span class="keyword">public</span> partial <span class="keyword">class</span> Car</li><li class="alt">{</li><li><span class="keyword">public</span> <span class="keyword">void</span> Accelerate() { <span class="comment">/*80, 90... 120, 140....1200...flying...*/</span>}</li><li class="alt"><span class="keyword">public</span> <span class="keyword">void</span> Break() {<span class="comment">/*zizizizizizizizizi....*/</span> }</li><li>}</li></ol></div>
<div class="highlighter">
<ol class="highlighter-c"><li><span class="keyword">public</span> <span class="keyword">class</span> Car</li><li class="alt">{</li><li><span class="comment">// UI </span></li><li class="alt">Color bodyColor;</li><li>Color windowColor;</li><li class="alt">Polygon door;</li><li>Polygon seat;</li><li><span class="comment">// logic </span></li><li class="alt"><span class="keyword">public</span> <span class="keyword">void</span> Accelerate() { <span class="comment">/*80, 90... 120, 140....1200...flying...*/</span>}</li><li><span class="keyword">public</span> <span class="keyword">void</span> Break() {<span class="comment">/*zizizizizizizizizi....*/</span> }</li><li class="alt">}</li></ol></div>
<p>实际效果是完全一样的。只是前者是把UI和逻辑劈开写，后者是混在一起写罢了。</p>
<p>&nbsp;</p>
<p>劈开的确是劈开了，但让设计师用C#代码去实现UI恐怕不现实&#8212;&#8212;让Blend直接生成C#不是不可能是事情，只是C#描述UI太不直观了。于是，微软更进一步，把界面描述语言又向设计师方向推进了一层，也就是XAML语言。于是，开发和设计的格局就变成了这样：</p>
<p>&nbsp;</p>
<p align="center"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/FantasiaX/EntryImages/20081211/p6.jpg" /></p>
<p>&nbsp;</p>
<p>有了XAML和将XAML解析为C#/VB的解析器，设计师们就能以自己最高的工作效率与程序员们合作开发软件了。目前关于XAML是如何解析成C#/VB的资料非常少。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="font-size: 14pt"><strong>Name揭秘</strong></p>
<p>&nbsp;</p>
<p>下面让我们把目光集中在XAML-&gt;C#的解析上来，看看Name和x:Name的本质是什么。</p>
<p>&nbsp;</p>
<p>让我们看一段代码：</p>
<p>&nbsp;</p>
<div class="highlighter">
<ol class="highlighter-xml"><li><span class="tag">&lt;</span><span class="tag-name">Window</span> <span class="attribute">x:Class</span>=<span class="attribute-value">"WpfApplication2.Window1"</span></li><li class="alt"><span class="attribute">xmlns</span>=<span class="attribute-value">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></li><li><span class="attribute">xmlns:x</span>=<span class="attribute-value">"http://schemas.microsoft.com/winfx/2006/xaml"</span></li><li class="alt"><span class="attribute">Title</span>=<span class="attribute-value">"Window1"</span> <span class="attribute">Height</span>=<span class="attribute-value">"100"</span> <span class="attribute">Width</span>=<span class="attribute-value">"300"</span> <span class="attribute">Background</span>=<span class="attribute-value">"SteelBlue"</span><span class="tag">&gt;</span></li><li><span class="tag">&lt;</span><span class="tag-name">StackPanel</span><span class="tag">&gt;</span></li><li class="alt"><span class="tag">&lt;</span><span class="tag-name">TextBox</span> <span class="attribute">Name</span>=<span class="attribute-value">"textBox1"</span><span class="tag">/&gt;</span></li><li><span class="tag">&lt;</span><span class="tag-name">TextBox</span> <span class="attribute">Name</span>=<span class="attribute-value">"textBox2"</span><span class="tag">/&gt;</span></li><li class="alt"><span class="tag">&lt;</span><span class="tag-name">Button</span> <span class="attribute">Content</span>=<span class="attribute-value">"Show Name"</span> <span class="attribute">Click</span>=<span class="attribute-value">"Button_Click"</span><span class="tag">/&gt;</span></li><li><span class="tag">&lt;/</span><span class="tag-name">StackPanel</span><span class="tag">&gt;</span></li><li><span class="tag">&lt;</span><span class="tag-name">x:Code</span><span class="tag">&gt;</span></li><li class="alt"><span class="cdata">&lt;![CDATA[</span></li><li><span class="cdata"></span></li><li class="alt"><span class="cdata">private void Button_Click(object sender, RoutedEventArgs e)</span></li><li><span class="cdata">{</span></li><li class="alt"><span class="cdata">Button btn = e.OriginalSource as Button;</span></li><li><span class="cdata">textBox1.Text = btn.Name;</span></li><li class="alt"></li><li><span class="cdata">textBox2.Name = "Made_in_China";</span></li><li class="alt"><span class="cdata">textBox2.Text = textBox2.Name;</span></li><li><span class="cdata">}</span></li><li class="alt"><span class="cdata"></span></li><li><span class="cdata">]]&gt;</span></li><li class="alt"><span class="tag">&lt;/</span><span class="tag-name">x:Code</span><span class="tag">&gt;</span></li><li><span class="tag">&lt;/</span><span class="tag-name">Window</span><span class="tag">&gt;</span></li></ol></div>
<p>运行结果是：</p>
<p>&nbsp;</p>
<p align="center"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/FantasiaX/EntryImages/20081211/p2.jpg" /></p>
<p>&nbsp;</p>
<p>我用XAML定义了三个UI元素，其中两个TextBox是有Name的。凡是你在XAML代码里设置了它的Name，那么在C#代码里就会有一个对应的变量。这可也很好解释，看看IL程序集就知道了&#8212;&#8212;</p>
<p>&nbsp;</p>
<p align="center"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/FantasiaX/EntryImages/20081211/p3.jpg" width="311" height="399" /></p>
<p>&nbsp;</p>
<p>不难看出，XAML解析器会为XAML代码中设置了Name的元素声明同名的引用变量，而且设置Name的元素则不会有引用变量生成（不过这个元素对应的对象是存在的，并且是VisualTree/LogicalTree上的结点）。</p>
<p>&nbsp;</p>
<p><span style="color: rgb(0,0,128)">通过上面的代码，我看可以看出，Name的作用有两个：</span></p>
<p><span style="color: rgb(0,0,128)">1. 告诉XAML解析器为设置了Name的元素声明对应的引用变量（本例中是textBox1和textBox2），变量名使用Name的值。</span></p>
<p><span style="color: rgb(0,0,128)">2. 将XAML元素对应的对象（本例中是两个TextBox的实例）的Name属性设置为Name的值。</span></p>
<p>&nbsp;</p>
<p>注意，引用变量一旦声明之后名字就不能改了，但对象的Name属性仍然可以改（示例中我就把由textBox2变量引用着的实例的Name属性改成Made_in_China了。）</p>
<p>&nbsp;</p>
<p>让我们再挖深点儿&#8212;&#8212;TextBox的Name属性是从哪儿继承来的呢？查一查MSDN，原来是从FrameworkElement那儿继承来的。这个Name属性是非常重要的&#8212;&#8212;如果你想在一棵&#8220;树&#8221;上查找叫某个名字的元素，调用&#8220;树根&#8221;的FindName方法就可以做到了。特别需要注意的是&#8212;&#8212;FindName所使用的参数是对象Name属性的值而不是引用着这个对象的变量的名字。如果你的程序里只在XAML里设置了一次Name，那么引用变量的名字和对象Name属性的值恰好一样。但如果你改变了对象Name属性的值，那可就要小心了！请看下面的代码：</p>
<p>&nbsp;</p>
<div class="highlighter">
<ol class="highlighter-c"><li><strong>&lt;Window x:Class=<span class="string">"WpfApplication2.Window1"</span></strong></li><li class="alt"><strong>xmlns=<span class="string">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></strong></li><li><strong>xmlns:x=<span class="string">"http://schemas.microsoft.com/winfx/2006/xaml"</span></strong></li><li class="alt"><strong>Title=<span class="string">"Window1"</span> Height=<span class="string">"100"</span> Width=<span class="string">"300"</span> Background=<span class="string">"SteelBlue"</span>&gt;</strong></li><li><strong>&lt;StackPanel&gt;</strong></li><li class="alt"><strong>&lt;TextBox Name=<span class="string">"textBox1"</span>/&gt;</strong></li><li><strong>&lt;TextBox Name=<span class="string">"textBox2"</span>/&gt;</strong></li><li class="alt"><strong>&lt;Button Content=<span class="string">"Show Name"</span> Click=<span class="string">"Button_Click"</span>/&gt;</strong></li><li><strong>&lt;/StackPanel&gt;</strong></li><li><strong>&lt;x:Code&gt;</strong></li><li class="alt"><strong>&lt;![CDATA[</strong></li><li><strong></strong></li><li class="alt"><strong><span class="keyword">private</span> <span class="keyword">void</span> Button_Click(<span class="keyword">object</span> sender, RoutedEventArgs e)</strong></li><li><strong>{</strong></li><li class="alt"><strong>textBox2.Name = <span class="string">"Made_in_China"</span>;</strong></li><li><strong><span class="comment">//this.RegisterName("Made_in_China", this.textBox2); </span></strong></li><li class="alt"><strong>TextBox t = <span class="keyword">this</span>.FindName(<span class="string">"Made_in_China"</span>) <span class="keyword">as</span> TextBox;</strong></li><li><strong><span class="keyword">if</span>(t==<span class="keyword">null</span>)</strong></li><li class="alt"><strong>{</strong></li><li><strong><span class="keyword">return</span>;</strong></li><li class="alt"><strong>}</strong></li><li><strong><span class="keyword">else</span></strong></li><li class="alt"><strong>{</strong></li><li><strong>MessageBox.Show(<span class="string">"OK"</span>);</strong></li><li class="alt"><strong>}</strong></li><li><strong>}</strong></li><li class="alt"><strong></strong></li><li><strong>]]&gt;</strong></li><li class="alt"><strong>&lt;/x:Code&gt;</strong></li><li><strong>&lt;/Window&gt;</strong></li></ol></div>
<p><span style="background-color: rgb(248,248,248); color: rgb(0,0,0)">注意，除非我取消对第17行的注释，不然，尽管我已经把textBox2.Name改成了Made_in_China，但由于这个新名字还没有被注册（即没有使用RegisterName方法将Made_in_China和textBox2所引用的对象关联起来），我们仍然不能通过FindName找到它。</span></p>
<p>&nbsp;</p>
<p><span style="background-color: rgb(248,248,248); color: rgb(0,0,0)">我知道这段话挺拗口，不过有一点你想通过某种方法查找由DataTemplate自动生成的UI元素时，或许应该跑来读一读这段绕口令:P</span></p>
<p>&nbsp;</p>
<p><span style="background-color: rgb(248,248,248); color: rgb(0,0,0)">最后再啰嗦一句：为什么这个Name属性可以起到在运行时被当作查找标识呢？是因为FrameworkElement被一个名为RuntimeNamePropertyAttribute的attribute所修饰。这个attribute明确指定，FrameworkElement的Name属性具备了作为查找标识的资格。TextBox等类派生自FrameworkElement，自然也有这个功能。下面是FrameworkElement类的声明。</span></p>
<p>&nbsp;</p>
<p><strong></strong></p><strong>
<div class="highlighter">
<ol class="highlighter-c"><li>[RuntimeNamePropertyAttribute(<span class="string">"Name"</span>)]</li><li class="alt">[StyleTypedPropertyAttribute(Property = <span class="string">"FocusVisualStyle"</span>, StyleTargetType = <span class="keyword">typeof</span>(Control))]</li><li>[XmlLangPropertyAttribute(<span class="string">"Language"</span>)]</li><li class="alt"><span class="keyword">public</span> <span class="keyword">class</span> FrameworkElement : UIElement, </li><li>IFrameworkInputElement, IInputElement, ISupportInitialize</li><li class="alt">{</li><li><span class="comment">//... </span></li><li class="alt">}</li></ol></div>
<p style="font-size: 14pt">x:Name揭秘</p>
<p></strong>&nbsp;</p>
<p>&nbsp;</p>
<p style="font-size: 14pt"></p>
<p>&nbsp;</p>
<p>x:Name的x加一个冒号，说明它来自x这个名称空间。这个名称空间是定义在XAML的根元素上的。也就是这句：</p>
<p>&nbsp;</p>
<div class="highlighter">
<ol class="highlighter-xml"><li><span class="attribute">xmlns:x</span>=<span class="attribute-value"><a href="http://schemas.microsoft.com/winfx/2006/xaml"><font color="#336699">http://schemas.microsoft.com/winfx/2006/xaml</font></a></span></li></ol></div>
<p>这个x就是XAML的字头了。这个名称空间的本意就是告诉我们&#8212;&#8212;这个名称空间里所装的元素都与XAML解析有关。比如，我在代码里还使用了x:Code，把本来应该呆在C#代码里的内容请到XAML里来了。</p>
<p>&nbsp;</p>
<p><span style="color: rgb(0,0,128)">可见，x:Name与Name根本不是一个层面上的东西&#8212;&#8212;Name是直接与元素和面向对象编程相关的东西；x:Name是XAML语言解析层面上的东西。</span></p>
<p>&nbsp;</p>
<p>如果我们把上面代码中的所有Name都改成x:Name，所有效果都是一样的。</p>
<p>不知道XAML中标有x:的内容是不是会被&#8220;预处理&#8221;一下。</p>
<p>&nbsp;</p>
<p style="font-size: 14pt"><strong>Name与x:Name关系揭秘</strong></p>
<p>&nbsp;</p>
<p>不过，如果你的逻辑感比较强，你会发现这样一个问题&#8212;&#8212;为一个XAML元素声明对应的引用变量，这不是面向对象编程层面的东西而是XAML解析层的东西。而且，如果Name在语义学上&#8220;恪守本分&#8221;的话，它应该只去设置一下对象的Name属性值而不去管是不是声明变量的事儿。</p>
<p>&nbsp;</p>
<p>大胆设想一下，你会猜到，当XAML解析器发现一个元素的Name被设置了，就会去调用x:Name的那套机制。也就是说，引用变量是在x:Name机制被调用的时候声明的。同样，如果你设置的是元素的x:Name，XAML解析器会在声明变量之后再去给实例的Name属性设置值。</p>
<p>&nbsp;</p>
<p>这样的猜想能够得到证实吗？让我们在MSDN里搜刮一下。</p>
<p>&nbsp;</p>
<p>在x:Name的注释里，我们能找到这段话：</p>
<p>&nbsp;</p>
<p>Under the standard build configuration for a WPF application project that uses XAML, partial classes, and code-behind, the specified x:Name becomes the name of a field that is created in the underlying code when XAML is processed, and that field holds a reference to the object. </p>
<p>&nbsp;</p>
<p>而在FrameworkElement.Name属性的文档里，又能找到这句话：</p>
<p>&nbsp;</p>
<p>This property essentially provides a WPF framework-level convenience property to set the XAML x:Name Attribute. </p>
<p>&nbsp;</p>
<p>也就是说，Name的确会去调x:Name那套机制。为什么这么做？可能是为了写起来方便。不过，我真不太喜欢这种搅和在一起的风格。我宁可使用Name去给对象的Name属性赋值而使用x:Name去声明变量。</p>
<p>&nbsp;</p>
<p><span style="color: rgb(0,0,128)">貌似&#8220;Under the standard build configuration &#8221;这句话有点玄机。不知道非standard编译配置会有什么样的效果，怎样才能自定义编译配置呢？</span></p>
<p>&nbsp;</p>
<p>不喜欢这种风格的原因还在于：Name和x:Name互相调用会在某些逻辑下出问题，特别是&#8220;先有鸡还是先有蛋&#8221;这种情况下。</p>
<p>&nbsp;</p>
<p><strong style="font-size: 14pt">关于在XAML中使用同一个程序集中的User Control</strong></p>
<p>&nbsp;</p>
<p>说到&#8220;先有鸡还是先有蛋&#8221;的问题，让我想起了另一个困扰自己很久的问题。请看下面的代码：</p>
<p>&nbsp;</p>
<p>假设我有这样一个project，</p>
<p>&nbsp;</p>
<p align="center"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/FantasiaX/EntryImages/20081211/p4.jpg" width="254" height="203" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>现在我想把MyControl用在我的Window1里。如果代码写成这样：</p>
<p>&nbsp;</p>
<div class="highlighter">
<ol class="highlighter-c"><li>&lt;Window x:Class=<span class="string">"WpfApplication.Window1"</span></li><li class="alt">xmlns=<span class="string">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></li><li>xmlns:x=<span class="string">"http://schemas.microsoft.com/winfx/2006/xaml"</span></li><li class="alt">xmlns:local=<span class="string">"clr-namespace:WpfApplication"</span></li><li>Title=<span class="string">"Window1"</span> Height=<span class="string">"300"</span> Width=<span class="string">"300"</span>&gt;</li><li class="alt">&lt;Grid&gt;</li><li>&lt;local:MyControl Name=<span class="string">"myControl"</span>/&gt;</li><li class="alt">&lt;/Grid&gt;</li><li>&lt;/Window&gt;</li></ol></div>
<p>当编译的时候，会报出错误：</p>
<p>&nbsp;</p>
<p align="center"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/FantasiaX/EntryImages/20081211/p5.jpg" width="271" height="175" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>最让人哭笑不得的原因就是&#8220;因为MyControl是在同一个程序集里，你就得使用x:Name而不是Name！&#8221;这算什么解释？<span style="background-color: rgb(255,255,0)">跟是不是同一个程序集有什么关系？</span></p>
<p>&nbsp;</p>
<p>=====================================</p>
<p>崔维福的补充：</p>
<p>"<span style="background-color: rgb(255,255,0)">跟是不是同一个程序集有什么关系</span>" 具体来说还是有关系的。你一定知道Name不能和x：Name同时用，因为在build的时候他知道这两个做了相同的工作，什么工作呢，就是做在&#8220;类名.g.cs&#8221;，中添加了后台代码，x:Name是Attribute，而Name是DP，编译器可以挖掘Attribute来为自己的后台添加内容，但是不能用Name来添加，因为自己还没有被构造完全呢。所以呢就是告诉你，要用x：Name，要不就把这个contro放到别的project下，它好能把它构造出来！希望我解释的够清楚！</p>
<p>&nbsp;</p>
<p>作者：</p>
<p>感谢崔先生的批注，您对技术精益求精的精神让我非常景仰，向您学习、致敬！</p>
<p>=====================================</p>
<p>&nbsp;</p>
<p>TO BE CONTINUE...</p>
<p>&nbsp;</p><img src ="http://www.cppblog.com/HienChu/aggbug/151172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/HienChu/" target="_blank">HienChu</a> 2011-07-16 16:42 <a href="http://www.cppblog.com/HienChu/archive/2011/07/16/151172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>错觉</title><link>http://www.cppblog.com/HienChu/archive/2011/07/09/150528.html</link><dc:creator>HienChu</dc:creator><author>HienChu</author><pubDate>Sat, 09 Jul 2011 06:35:00 GMT</pubDate><guid>http://www.cppblog.com/HienChu/archive/2011/07/09/150528.html</guid><wfw:comment>http://www.cppblog.com/HienChu/comments/150528.html</wfw:comment><comments>http://www.cppblog.com/HienChu/archive/2011/07/09/150528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/HienChu/comments/commentRss/150528.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/HienChu/services/trackbacks/150528.html</trackback:ping><description><![CDATA[<div>近几天来，突然发现实验室电脑的显示器总是过一分钟就&#8220;自动关闭&#8221;，本能的检查了电源选项里的&#8220;关闭显示器的时间&#8221;，所有的电源计划中的该项设置都是&#8220;从不&#8221;，但是显示器还是一如既往的&#8220;自动关闭&#8221;，于是开始怀疑是不是Windows本身的问题，但刚刚突然想起&#8220;一分钟&#8221;这个特殊的时间，通常是触发&#8220;屏幕保护程序&#8221;的默认时间值，于是赶紧查看屏保设置，果然，屏保被设置为了&#8220;空白&#8221;（实际效果就是屏幕变黑）。于是想起几天前尝试过Windows 8&nbsp;Metro 主题，估计是自动重置了屏保。<br /><br />问题不大，但是却有些蹊跷，只是想说，人很多时候对现象的理解都是基于自己的知识结构和经验的，遇到貌似无解的问题是，抛开现有的想法，也许答案就是那么简单。</div><img src ="http://www.cppblog.com/HienChu/aggbug/150528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/HienChu/" target="_blank">HienChu</a> 2011-07-09 14:35 <a href="http://www.cppblog.com/HienChu/archive/2011/07/09/150528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenCV highgui中如何显示图像</title><link>http://www.cppblog.com/HienChu/archive/2011/06/16/148783.html</link><dc:creator>HienChu</dc:creator><author>HienChu</author><pubDate>Thu, 16 Jun 2011 07:51:00 GMT</pubDate><guid>http://www.cppblog.com/HienChu/archive/2011/06/16/148783.html</guid><wfw:comment>http://www.cppblog.com/HienChu/comments/148783.html</wfw:comment><comments>http://www.cppblog.com/HienChu/archive/2011/06/16/148783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/HienChu/comments/commentRss/148783.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/HienChu/services/trackbacks/148783.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近项目中要做一个图像显示的模块，需要支持OpenCV中的图像格式。虽然OpenCV中的highgui模块提供了简单易用的图像显示函数cvShowImage，可以直接将图像显示到一个弹出窗口中，但是貌似仅支持用cvNamedWindow创建出来的窗口（<em>尽管文档中指出该函数在Win32环境中返回的是标准windows窗口句柄HWND，但是在调用cvShowImage时需要传入通过cvWindowName获得的窗口名称，windows中创建的窗口貌似名称都是空，所以目前我还没有成功</em>），不能很方便的集成到其他系统中。所以不得不到源码中去探个究竟，看看cvShowImage是怎么实现的。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;看了源码后才发现，cvShowImage写得非常简洁，是直接通过GDI来实现在窗口中绘制位图的，其中主要有三个步骤<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>1. 获得指定窗口的信息<br /></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenCV中，窗口都是通过窗口名称来调用的。这样做的好处是方便了快速调用（这也是highgui的定位），将句柄隐藏在了名称背后，但窗口其实还是标准的windows窗口。<br /><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 获得窗口关联的位图对象</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;众所周知，在GDI中设备上下文（Device Context）是一个非常核心的概念，它近乎完美的将系统中的&#8220;设备本身&#8221;和&#8220;设备所显示的内容&#8221;分离开来（所谓的松耦合）。<br />尽管GDI很复杂，但作为Windows的图形界面引擎，无非是在解决两个问题：<br /><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;What：需要绘制什么内容。</strong>能够被绘制的东西在GDI中成为GDI对象，其中包括位图（BITMAP）、画笔（PEN）、画刷（BRUSH）等对象。<br /><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Where：在什么地方绘制。</strong>GDI中所有图形内容最终都展现在&#8220;设备&#8221;上，这里的&#8220;设备&#8221;可以是显示器、打印机、绘图仪等硬件图形输出设备，也可以是窗口、对话框等Windows对象，此外还可以是内存区域。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而上文提到的&#8220;设备上下文&#8221;其实就负责完成&#8220;GDI对象&#8221;和&#8220;设备&#8221;之间的工作。我想，到这里GDI基本的实现思想应该就比较清晰了。具体的实现过程中涉及到了几个关键的Windows API：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">获取设备上下文中指定类型的GDI对象</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">HGDIOBJ&nbsp;GetCurrentObject(<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;__in&nbsp;&nbsp;HDC&nbsp;hdc,&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">设备上下文</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;__in&nbsp;&nbsp;UINT&nbsp;uObjectType&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">GDI对象类型</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">);</span></div>
<p>其中GDI对象类型可以是OBJ_BITMAP、OBJ_BRUSH等（详见<a href="http://msdn.microsoft.com/en-us/library/dd144869(VS.85).aspx" target="_blank">http://msdn.microsoft.com/en-us/library/dd144869(VS.85).aspx</a>）。<br />用该函数获得窗口当前关联的位图对象后，便可以通过该位图对象实现在窗口中绘制想要的内容了。</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">获得窗口关联的位图对象的句柄</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">HGDIOBJ&nbsp;h&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetCurrentObject(&nbsp;window</span><span style="color: #000000">-&gt;</span><span style="color: #000000">dc,&nbsp;OBJ_BITMAP&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">获得该位图的详细信息，bmp为BITMAP结构变量<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">其中包含了位图的尺寸、颜色以及数据区域的头指针</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">GetObject(h,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(bmp),&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">bmp);</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>3. 将用户图像数据绘制到窗口上<br /></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BITMAP结构体中，LPVOID类型的bmBits成员变量为指向位图数据区域的指针，使用OpenCV中的cvInitMatHeader将该指针初始化为一个CvMat对象的数据区域指针，然后再将图像数据填充到CvMat对象中去，这样最终窗口对应的位图对象中的数据就是用户指定的图像数据了。</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">cvInitMatHeader函数原型</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">CvMat</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;cvInitMatHeader(&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;CvMat</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;mat,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rows,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cols,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;type,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;data</span><span style="color: #000000">=</span><span style="color: #000000">NULL,&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">数据指针</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;step</span><span style="color: #000000">=</span><span style="color: #000000">CV_AUTOSTEP&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br /><br /><em>由于之前对GDI了解甚少，只是在数年前的MFC中接触过一些，所以为了搞清楚这其中的过程，花了不少时间。在查阅了很多资料后终于大致弄清楚了GDI一些最基本的东西。不得不说，GDI概念很简单，但是实现实在是太复杂了。<br /></em></p>  <img src ="http://www.cppblog.com/HienChu/aggbug/148783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/HienChu/" target="_blank">HienChu</a> 2011-06-16 15:51 <a href="http://www.cppblog.com/HienChu/archive/2011/06/16/148783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NX7 Open Wizard for Visual Studio 2010</title><link>http://www.cppblog.com/HienChu/archive/2010/10/02/128299.html</link><dc:creator>HienChu</dc:creator><author>HienChu</author><pubDate>Sat, 02 Oct 2010 05:58:00 GMT</pubDate><guid>http://www.cppblog.com/HienChu/archive/2010/10/02/128299.html</guid><wfw:comment>http://www.cppblog.com/HienChu/comments/128299.html</wfw:comment><comments>http://www.cppblog.com/HienChu/archive/2010/10/02/128299.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/HienChu/comments/commentRss/128299.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/HienChu/services/trackbacks/128299.html</trackback:ping><description><![CDATA[<p>最近需要基于UG（现在叫NX）做一些开发。由于用Windows7 +VS2010已经有一段时间了，感觉还不错，于是为了不重新折腾开发环境，下载安装了能够支持Windows7的UG最新版本NX7.5。安装过程与之前版本没有区别，但是在配置NXOpen for C++（详细介绍请看<a href="http://blog.csdn.net/begtostudy/archive/2008/05/17/2453735.aspx" target=_blank>begtostudy的博客</a>）时才发现，如果注定要折腾，那只是迟早的事。<br><br>由于NXOpen几乎为UG的所有功能都提供了接口，因此规模可见一斑。为了方便开发，NXOpen提供了Visual Studio中常见的Wizard来帮助开发者快速创建所需的项目类型，免去手动添加头文件、链接库等配置的麻烦。然后，即使最新的NX7.5，所提供的Wizard也只支持到VS2008。如果直接按照文档中的安装说明，将Wizard相关文件拷贝到VS的对应目录下的话，Wizard并不会出现在新建项目的菜单中，玄机在NX7_Open.vsz这个文件中，这个文件保存了Wizard的基本信息，内容如下：<br></p>
<p>&nbsp;</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; TEXT-INDENT: 10px; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">VSWIZARD&nbsp;</span><span style="COLOR: #000000">7.0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;&nbsp;2</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">Wizard</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">VsWizard.VsWizardEngine</span><span style="COLOR: #000000">.9.0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;&nbsp;3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;&nbsp;4</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">Param</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WIZARD_NAME&nbsp;=&nbsp;NX7_Open</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">Param</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">FALLBACK_LCID&nbsp;=&nbsp;1033</span><span style="COLOR: #000000">"</span></div>
<p><br>第2行中，默认的VsWizardEngine版本是9.0（VS2008），因此需要手动改为10.0（VS2010）。修改保存后，启动VS2010，在新建菜单的C++类别下，就可以看到NX7 Open Wizard的选项了，但是问题到此还没有结束（我正是从这里开始折腾的）。选择NX7 Open Wizard，确定后会弹出类似于MFC中的新建项目向导，提供一些配置（不需要修改的话可以直接点Finish）。但是当点击Finish的时候，问题出现了，错误信息为&#8220;对象不支持此操作&#8221;，项目创建失败。初次看到这样的错误提示，的确无从下手，但是任何错误都一定有原因的。<br><br>Visual Studio中的项目模板和向导都是可以自定义的，并且在VS2010中还提供了创建自定义Wizard的项目模板Custom Wizard（详细的资料看<a href="http://msdn.microsoft.com/en-us/library/96xz4cw2.aspx" target=_blank>这里</a>）。根据MSDN上的相关内容介绍，Wizard其实是一组html页面（每个页面对应一个步骤），通过JScript来调用Visual Studio提供的内建对象（code, project 和wizard）来实现最终项目的生成和配置。每一个Wizard项目都会包含一些固定的文件和文件夹，如下（来自MSDN）：<br>
<table>
    <tbody>
        <tr>
            <th>
            <p>File</p>
            </th>
            <th>
            <p>Description</p>
            </th>
        </tr>
        <tr>
            <td>
            <p><a href="http://msdn.microsoft.com/en-us/library/e06awfzy.aspx"><font color=#1364c4>Project.vsz</font></a></p>
            </td>
            <td>
            <p>A text file that resembles the old .ini format. It identifies the wizard engine and provides context and optional <a href="http://msdn.microsoft.com/en-us/library/cc9ss95t.aspx"><font color=#1364c4>custom parameters</font></a>. </p>
            </td>
        </tr>
        <tr>
            <td>
            <p><a href="http://msdn.microsoft.com/en-us/library/2sc7ft4a.aspx"><font color=#1364c4>Project.vsdir</font></a></p>
            </td>
            <td>
            <p>A text file that enables the Visual Studio shell to find the wizard and display it in the <span class=label><strong>New Project</strong></span> dialog box.</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><a href="http://msdn.microsoft.com/en-us/library/tce6dbyz.aspx"><font color=#960bb4>HTML files (optional)</font></a></p>
            </td>
            <td>
            <p>A wizard can contain a user interface (UI), which is an HTML interface. A wizard without a UI contains no HTML files. </p>
            <p>If a wizard has a UI, each individual screen in the wizard is known as a <span class=parameter>page</span>, and each page specifies UI features. </p>
            <p>The default.htm file defines the first page in the wizard. Use the <span class=label><strong>Number of pages</strong></span> list box of <a href="http://msdn.microsoft.com/en-us/library/a63954h5.aspx"><font color=#960bb4>Application Settings, Custom Wizard</font></a> to specify additional pages. Each additional page is defined by a Page_<span class=parameter>page-number</span>.htm file, where <span class=parameter>page-number</span> ranges from 2 through the number of pages that you specify. </p>
            </td>
        </tr>
        <tr>
            <td>
            <p><a href="http://msdn.microsoft.com/en-us/library/24c7e0e7.aspx"><font color=#960bb4>Script files</font></a></p>
            </td>
            <td>
            <p>The Custom Wizard creates a JScript file, default.js, for each wizard created. This file contains JScript functions that access the Visual C++ Wizard, Code, and Environment Object Models to customize a wizard. You can customize and add functions in your wizard's default.js file. </p>
            <p>Additionally, your wizard includes the <a href="http://msdn.microsoft.com/en-us/library/yb311h74.aspx"><font color=#960bb4>common.js</font></a> file, which contains commonly used JScript functions and is shared among all wizards, including the wizards used by Visual C++ to create other project types. For more information, see <span><a href="http://msdn.microsoft.com/en-us/library/yb311h74.aspx"><font color=#960bb4>Customizing C++ Wizards with Common JScript Functions</font></a></span>.</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><a href="http://msdn.microsoft.com/en-us/library/bf952e4s.aspx"><font color=#1364c4>Templates</font></a></p>
            </td>
            <td>
            <p>A wizard's templates are a collection of text files that contain directives, which are parsed and inserted into the symbol table, depending on the wizard user's selections. The template text files are rendered according to the user input and added to the project created by the wizard. The appropriate information is obtained by directly accessing the wizard control's symbol table.</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><a href="http://msdn.microsoft.com/en-us/library/815h0hw3.aspx"><font color=#1364c4>Templates.inf</font></a></p>
            </td>
            <td>
            <p>A text file that lists all templates associated with the project.</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>Default.vcxproj</p>
            </td>
            <td>
            <p>An .xml file that contains the information about the project type.</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>Sample.txt</p>
            </td>
            <td>
            <p>A template file that shows how your wizard directives are used.</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>ReadMe.txt</p>
            </td>
            <td>
            <p>A template file that contains a summary of each file created by the Custom Wizard.</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>Images (optional)</p>
            </td>
            <td>
            <p>You can provide any images, such as icons, GIFs, BMPs, and other HTML-supported image formats, to enhance the UI for your wizard. A wizard that has no UI does not require images. </p>
            </td>
        </tr>
        <tr>
            <td>
            <p>Styles.css (optional)</p>
            </td>
            <td>
            <p>A file that defines the styles for the UI. If your wizard does not have a user interface, the Custom Wizard does not create a .css file.</p>
            </td>
        </tr>
    </tbody>
</table>
<br>其中提到的Script Files（默认为default.js）完成了项目生成的主要工作，而之前提到的错误也正出在这里。CustomWizard项目中的html files需要调用Visual Studio提供的内建对象（包含在common.js中），因此没有办法想调试网页一样使用浏览器调试JScript脚本，VS2010貌似也没有提供其他的调试JScript的方法（至少我没有找到），因此不得不利用注释测试NX7_Open中default.js的每一行语句（好在文件不是很长），最后终于发现了罪魁祸首，在default.js文件的第200行：<br><br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; TEXT-INDENT: 10px; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;<span style="COLOR: #000000">CLTool.Detect64BitPortabilityProblems&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;</span></div>
<br>这句的作用是设置一个编译器开关，指定编译器在编译过程中检查程序的64位可移植性，但是在VS2010，这一特性在VS2010中已经不建议使用，并且这种设置方式已经不适用于VS2010（详见<a href="http://msdn.microsoft.com/en-us/library/yt4xw8fh.aspx" target=_blank>这里</a>），所以才出现错误信息&#8220;对象不支持此操作&#8221;，解决办法很简单，直接注释掉该行就可以了。至此，就可以愉快的在VS2010中使用NX7 Open Wizard创建你自己的项目了。<br><br>尽管问题很简单，解决办法也很简单，但探索的过程是漫长的，好在国庆长假时间充裕。最后再次感谢begtostudy学长（虽然彼此不认识）的博客。 
 <img src ="http://www.cppblog.com/HienChu/aggbug/128299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/HienChu/" target="_blank">HienChu</a> 2010-10-02 13:58 <a href="http://www.cppblog.com/HienChu/archive/2010/10/02/128299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Notes On C++ (二)</title><link>http://www.cppblog.com/HienChu/archive/2007/09/05/31628.html</link><dc:creator>HienChu</dc:creator><author>HienChu</author><pubDate>Wed, 05 Sep 2007 07:41:00 GMT</pubDate><guid>http://www.cppblog.com/HienChu/archive/2007/09/05/31628.html</guid><wfw:comment>http://www.cppblog.com/HienChu/comments/31628.html</wfw:comment><comments>http://www.cppblog.com/HienChu/archive/2007/09/05/31628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/HienChu/comments/commentRss/31628.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/HienChu/services/trackbacks/31628.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 位操作为操作有两种方式，C风格以及C++风格。1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C风格的位操作使用了一系列的位操作运算符，如下：                                    操作符                                    功能             ...&nbsp;&nbsp;<a href='http://www.cppblog.com/HienChu/archive/2007/09/05/31628.html'>阅读全文</a><img src ="http://www.cppblog.com/HienChu/aggbug/31628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/HienChu/" target="_blank">HienChu</a> 2007-09-05 15:41 <a href="http://www.cppblog.com/HienChu/archive/2007/09/05/31628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>chm文件“该页无法显示”的解决办法</title><link>http://www.cppblog.com/HienChu/archive/2007/09/02/31395.html</link><dc:creator>HienChu</dc:creator><author>HienChu</author><pubDate>Sun, 02 Sep 2007 07:13:00 GMT</pubDate><guid>http://www.cppblog.com/HienChu/archive/2007/09/02/31395.html</guid><wfw:comment>http://www.cppblog.com/HienChu/comments/31395.html</wfw:comment><comments>http://www.cppblog.com/HienChu/archive/2007/09/02/31395.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/HienChu/comments/commentRss/31395.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/HienChu/services/trackbacks/31395.html</trackback:ping><description><![CDATA[前些天在网上搜罗了些C++的经典书籍，大多是.chm格式的。刚刚有空，想拿来读读，可是郁闷的事情发生了，点击目录时，右面竟然显示&#8220;该页无法显示&#8221;！<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 郁闷，下的时候还好好的，怎么现在就down了呢？难道是病毒？<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 百度了问题之后，发现答案前篇一律:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#800080> 一.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、开始运行，输入：regsvr32 C:\windows\system32\hhctrl.ocx ，确定，重新关联文件。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、执行一下windows目录里的hh.exe 。 <br></font></p>
<p><font color=#800080>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 在微软网站上下载hhupd.exe,安装hh.exe后并运行。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.实际上,下载hhupd.exe后,运行后就可以了。这个东西大小为461kb 3.在c:\windows\system32里找到&#8220;Hhctrl.ocx&#8221;文件,然后运行:&#8220;regsvr32 c:\windows\system32\hhctrl.ocx...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1，右键关联chm文件的&#8220;打开方式&#8221;到\Windows\HH.exe <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2，在命令行运行regsvr32 itss.dll <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3，在命令行运行regsvr32 hhctrl.ocx </font></p>
<p><font color=#800080>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#000000>但这些方法我对我却丝毫不起作用，于是只能自寻出路。我试着把某个文件copy到桌面上，试着打开，居然成功了。直觉告诉我，问题出在文件夹的名称上。因为我突然想起自己在整理之后把目录名称改成了"C__C++__C#&#8221;,于是试探性的更改了文件夹名称，试了几次，终于确定了罪魁祸首——是&#8220;#&#8221;。把"C#&#8221;改成"C Sharp"以后，问题解决了。</font></font><font color=#800080><br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那究竟为什有了"#"就不行了呢？因为.chm是以html格式存储内容的，所以每一页都对应了一个本地的URL地址。在URL地址的标准规定中"#"是属于特殊字符，代表书签，详细的标准说明可以参看这里<a href="http://www.128kj.com/article/article9/D15BCF6C477EAA03699B8B9FB25B3CD9.htm?id=675"><u><font color=#0000ff>http://www.128kj.com/article/article9/D15BCF6C477EAA03699B8B9FB25B3CD9.htm?id=675</font></u></a>。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果目录名称里含有"#"或者其他特殊字符的话，URL地址就因此而被中断了，自然&#8220;该页无法显示&#8221;。<br></p>
<img src ="http://www.cppblog.com/HienChu/aggbug/31395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/HienChu/" target="_blank">HienChu</a> 2007-09-02 15:13 <a href="http://www.cppblog.com/HienChu/archive/2007/09/02/31395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Notes On C++ (一)</title><link>http://www.cppblog.com/HienChu/archive/2007/09/02/HienChu.html</link><dc:creator>HienChu</dc:creator><author>HienChu</author><pubDate>Sun, 02 Sep 2007 07:01:00 GMT</pubDate><guid>http://www.cppblog.com/HienChu/archive/2007/09/02/HienChu.html</guid><wfw:comment>http://www.cppblog.com/HienChu/comments/31392.html</wfw:comment><comments>http://www.cppblog.com/HienChu/archive/2007/09/02/HienChu.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/HienChu/comments/commentRss/31392.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/HienChu/services/trackbacks/31392.html</trackback:ping><description><![CDATA[<h1 style="MARGIN: 17pt 0cm 16.5pt; TEXT-ALIGN: center" align=center><span lang=EN-US><font face="Times New Roman" color=#000000 size=6>Notes on C++ Primer</font></span></h1>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（一）</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文字常量</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>1. </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">整数文字常量可以被写成十进制八进制或者十六进制的形式这不会改变该整数值的</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位序列。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>2. </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在整型文字常量前面加一个</span><span lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该值将被解释成一个八进制数而在前面加一个</span><span lang=EN-US>0x </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span><span lang=EN-US>0X</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则会使一个整型文字常量被解释成十六进制数。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>3.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">整型文字常量默认为有有符号的</span><span lang=EN-US>int</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型，可以在常量后添加&#8220;</span><span lang=EN-US>L/l</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;将常量指定为</span><span lang=EN-US>long</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型，添加&#8220;</span><span lang=EN-US>U/u</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;来将常量指定为无符号类型。例如</span><st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1024" UnitName="l"><span lang=EN-US>1024L</span></st1:chmetcnv><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US>222U</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>4.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">浮点类型的文字常量可表示为普通十进制或者科学计数法，例如：</span><span lang=EN-US>25.3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US>2.7E2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在普通十进制表示时，可以在常量后追加&#8220;</span><span lang=EN-US>F/f</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;将常量指定为单精度，&#8220;</span><span lang=EN-US>L/l</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;扩展精度。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>5.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一部分不可打印的字符单引号双引号以及反斜杠可以用如下的转义序列来表示，转义符的基本格式为：</span><span lang=EN-US>\xxx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang=EN-US>xxx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为三位的八进制数）。下表为各转义符的意义。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="mso-font-kerning: 0pt">n</span><span lang=EN-US>ewline(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">换行符</span><span lang=EN-US>) \n</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>horizontal tab(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">水平制表键</span><span lang=EN-US>) \t</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>vertical tab(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直制表键</span><span lang=EN-US>) \v</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>backspace(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">退格键</span><span lang=EN-US>) \b</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>carriage return (</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回车键</span><span lang=EN-US>) \r</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>formfeed (</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进纸键</span><span lang=EN-US>) \f</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>alert (beel) (</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">响铃符</span><span lang=EN-US>) \a</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>backslash (</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">反斜杠键</span><span lang=EN-US>) \\</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>question mark (</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问号</span><span lang=EN-US>) \?</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>single quote (</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">单引号</span><span lang=EN-US>) \'</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>double quote (</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">双引号</span><span lang=EN-US>) \"</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>6.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字符型常量默认为</span><span lang=EN-US>char</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型，可以通在常量前面加上&#8220;</span><span lang=EN-US>L</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;将常量指定为</span><span lang=EN-US>w_char</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">宽字符类型。同样也可以将</span><span lang=EN-US>char</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型的字符串指定为宽字符串。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会自动将程序中的相邻两个普通字符串或宽字符串连接成一个，而当普通字符串与宽字符串相邻时，则会出错！</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量命名习惯。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常变量名用小心字母，如</span><span lang=EN-US>index</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。而</span><span lang=EN-US>Index</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则通常作为类名，</span><span lang=EN-US>INDEX</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则通常被定义为常量（用</span><span lang=EN-US>#DEFINE</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）定义。在包含有多个单词的变量命中，习惯上在每个词间加下划线&#8220;</span><span lang=EN-US>_</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;或者每个词首字母大写。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>2. L-Value &amp; R-Value</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>L-Value</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可解释为&#8220;</span><span lang=EN-US>Left Value</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;或者&#8220;</span><span lang=EN-US>Location Value</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;</span><span lang=EN-US>,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于储存内存地址。而</span><span lang=EN-US>R-Value</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可解释为&#8220;</span><span lang=EN-US>Right-Value</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;或者&#8220;</span><span lang=EN-US>Read Value</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;，用于储存用户数据。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指针</span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo2; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指针定义时的&#8220;</span><span lang=EN-US>*</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;与解引用符&#8220;</span><span lang=EN-US>*</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;是两个不同的概念。定义时的</span><span lang=EN-US>*</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代表之后的变量是某类型的指针，而解引用符与变量名共同组成一个等同于改类型变量的符号。更确切的说，在定义时，</span><span lang=EN-US>*</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是与类型名组合，而解引用时，</span><span lang=EN-US>*</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是与变量名组合。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字符串</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo3; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US>c</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">风格的字符串，以字符数组的方式声明，操作与普通数组基本相同，唯一的不同是字符数组支持整体输出，以及包含在</span><span lang=EN-US> &#8220;cstring.h&#8221; </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的一些函数。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo3; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang=EN-US>c++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字符串类型，是标准库中的一个类。与</span><span lang=EN-US>c</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">风格的字符串相比，后者的最大好处是避免了前者对字符的底层操作而引起的错误，增加了程序的稳定性与速度。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：二者均属于</span><span lang=EN-US>c++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标准库中的部分。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US>CONST</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修饰符</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo4; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将一个常量定义为变量：</span><span lang=EN-US>Const &lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型名</span><span lang=EN-US>&gt; &lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量名</span><span lang=EN-US>&gt;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo4; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指向常量变量的指针：</span><span lang=EN-US>const &lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型名</span><span lang=EN-US>&gt; * &lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量名</span><span lang=EN-US>&gt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。指针本身的值是可以赋值或者修改的，而指针所指向的对象的值不可修改。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo4; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常量指针：</span><span lang=EN-US>&lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型名</span><span lang=EN-US>&gt; * const &lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量名</span><span lang=EN-US>&gt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。指针指向的内容可以被修改，但指针本身不可以被赋值其他地址。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">小结：</span><span lang=EN-US>const</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修饰符总是将限定作用加在最靠近他的那个关键字上，类似于英语语法中的就近原则。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">枚举类型</span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l4 level1 lfo5; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">枚举类型定义了一个自定义属性的集合：</span><span lang=EN-US>enum &lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">集合名</span><span lang=EN-US>&gt; {</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元素</span><span lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，元素</span><span lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，&#8230;&#8230;</span><span lang=EN-US>}</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l4 level1 lfo5; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">枚举类型的元素可以在定义时被赋予整形值，可以比较大小及其他运算，但是只可以利用同类型的变量对已有变量赋值。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数组</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数组与指针的关系：数组名是以个指向数组元素类型的指针，因此，理论上可以用指针完全操作数组。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数组的代替：</span><span lang=EN-US>vector<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标准库提供了更易于使用的数组替代品</span><span lang=EN-US>Vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（当然，某些特殊的情况依然需要内置数组），使用</span><span lang=EN-US>Vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要包含头文件&#8220;</span><span lang=EN-US>vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与内置数组相比，标准</span><span lang=EN-US>vector</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类提供了很多便利的函数，比如</span><span lang=EN-US>empty</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（），</span><span lang=EN-US>size</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（），</span><span lang=EN-US>begin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（），</span><span lang=EN-US>end</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（）等。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US>Typedef<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Typedef</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义了一个类型的别名，而不是一个新类。换句话说，</span><span lang=EN-US>tyepdef</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义的名称与已有的完整的类名有完全相同的功能。</span><span lang=EN-US>Typedef</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并不支持在类基础上的任何自定义操作。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US>Volatile<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当一个对象的值可能会在编译器的控制或监测之外被改变时，例如一个被系统时钟更新</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的变量，那么该对象应该声明成</span><span lang=EN-US>volatile</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因此编译器执行的某些例行优化行为不能应用在</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已指定为</span><span lang=EN-US>volatile </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的对象上。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：</span><span lang=EN-US>volatile</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span><span lang=EN-US>const</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一样，都是类型的附加修饰符。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US>Pair</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>pair</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型也是</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标准库的一部分，包含在头文件&#8220;</span><span lang=EN-US>utility</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;中。定义方式如下：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5"><span lang=EN-US>pair &lt;type1,type2&gt;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它使得变量能够将两个不同的类型联合起来。</span></p>
<img src ="http://www.cppblog.com/HienChu/aggbug/31392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/HienChu/" target="_blank">HienChu</a> 2007-09-02 15:01 <a href="http://www.cppblog.com/HienChu/archive/2007/09/02/HienChu.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>/*********Fun In C++*********/</title><link>http://www.cppblog.com/HienChu/archive/2007/08/28/31026.html</link><dc:creator>HienChu</dc:creator><author>HienChu</author><pubDate>Tue, 28 Aug 2007 07:37:00 GMT</pubDate><guid>http://www.cppblog.com/HienChu/archive/2007/08/28/31026.html</guid><wfw:comment>http://www.cppblog.com/HienChu/comments/31026.html</wfw:comment><comments>http://www.cppblog.com/HienChu/archive/2007/08/28/31026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/HienChu/comments/commentRss/31026.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/HienChu/services/trackbacks/31026.html</trackback:ping><description><![CDATA[#DEFINE NOW&nbsp; 2007.8.28<br>#DEFINE FUN 0<br><br>#include "interest"<br>#include "passion"<br>#include "patience"<br><br>using namespace Life;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interest&nbsp; MyInterest;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;passion&nbsp; MyPassion;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;patience MyPatience;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int day=NOW<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Myinterest.Up();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyPassion.Up();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyPatience.Up();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;day++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}while (day&gt;1000000)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FUN;<br>} 
<img src ="http://www.cppblog.com/HienChu/aggbug/31026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/HienChu/" target="_blank">HienChu</a> 2007-08-28 15:37 <a href="http://www.cppblog.com/HienChu/archive/2007/08/28/31026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>