﻿<?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++博客-Linux,C/C++,网络......-随笔分类-[51] C&amp;C++</title><link>http://www.cppblog.com/volant/category/10539.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 16 Aug 2013 17:29:18 GMT</lastBuildDate><pubDate>Fri, 16 Aug 2013 17:29:18 GMT</pubDate><ttl>60</ttl><item><title>regex——正则表达式中使用方括号</title><link>http://www.cppblog.com/volant/archive/2010/04/12/112314.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Mon, 12 Apr 2010 05:14:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2010/04/12/112314.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/112314.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2010/04/12/112314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/112314.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/112314.html</trackback:ping><description><![CDATA[<p>工作中经常需要在正则表达式中使用方括号，比如匹配Linux系统命令行提示符&#8220;[root@localhost ~]# &#8221;。在python中，可以使用正则表达式&#8220;[\[][^\[\]]*[\]][#|$] &#8221;进行匹配，但在regex中此正则表达式无法正确匹配。<br>由于man手册中缺少对方括号转义的介绍，本文对regex中方括号的使用进行测试，测试程序如下：</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"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">sys</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">types.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">regex.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;argv)<br><img id=Codehighlighter1_115_1743_Open_Image onclick="this.style.display='none'; Codehighlighter1_115_1743_Open_Text.style.display='none'; Codehighlighter1_115_1743_Closed_Image.style.display='inline'; Codehighlighter1_115_1743_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_115_1743_Closed_Image onclick="this.style.display='none'; Codehighlighter1_115_1743_Closed_Text.style.display='none'; Codehighlighter1_115_1743_Open_Image.style.display='inline'; Codehighlighter1_115_1743_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_115_1743_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_115_1743_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pattern,&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">mstr;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,&nbsp;z,&nbsp;lno&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;cflags&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;REG_EXTENDED;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ebuf[</span><span style="COLOR: #000000">128</span><span style="COLOR: #000000">],&nbsp;lbuf[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">],&nbsp;format[</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regex_t&nbsp;reg;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regmatch_t&nbsp;pm[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;size_t&nbsp;nmatch&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;argv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;regcomp(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg,&nbsp;pattern,&nbsp;cflags);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(z&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_428_621_Open_Image onclick="this.style.display='none'; Codehighlighter1_428_621_Open_Text.style.display='none'; Codehighlighter1_428_621_Closed_Image.style.display='inline'; Codehighlighter1_428_621_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_428_621_Closed_Image onclick="this.style.display='none'; Codehighlighter1_428_621_Closed_Text.style.display='none'; Codehighlighter1_428_621_Open_Image.style.display='inline'; Codehighlighter1_428_621_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_428_621_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_428_621_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regerror(z,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg,&nbsp;ebuf,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ebuf));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s:&nbsp;pattern&nbsp;'%s'&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ebuf,&nbsp;pattern);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regfree(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(fgets(lbuf,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(lbuf),&nbsp;stdin))<br><img id=Codehighlighter1_680_1699_Open_Image onclick="this.style.display='none'; Codehighlighter1_680_1699_Open_Text.style.display='none'; Codehighlighter1_680_1699_Closed_Image.style.display='inline'; Codehighlighter1_680_1699_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_680_1699_Closed_Image onclick="this.style.display='none'; Codehighlighter1_680_1699_Closed_Text.style.display='none'; Codehighlighter1_680_1699_Open_Image.style.display='inline'; Codehighlighter1_680_1699_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_680_1699_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_680_1699_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">lno;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strlen(lbuf))&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;lbuf[z</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;lbuf[z&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;regexec(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg,&nbsp;lbuf,&nbsp;nmatch,&nbsp;pm,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(z&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;REG_NOMATCH)<br><img id=Codehighlighter1_898_998_Open_Image onclick="this.style.display='none'; Codehighlighter1_898_998_Open_Text.style.display='none'; Codehighlighter1_898_998_Closed_Image.style.display='inline'; Codehighlighter1_898_998_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_898_998_Closed_Image onclick="this.style.display='none'; Codehighlighter1_898_998_Closed_Text.style.display='none'; Codehighlighter1_898_998_Open_Image.style.display='inline'; Codehighlighter1_898_998_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_898_998_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_898_998_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">not&nbsp;match\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(z&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1049_1280_Open_Image onclick="this.style.display='none'; Codehighlighter1_1049_1280_Open_Text.style.display='none'; Codehighlighter1_1049_1280_Closed_Image.style.display='inline'; Codehighlighter1_1049_1280_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1049_1280_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1049_1280_Closed_Text.style.display='none'; Codehighlighter1_1049_1280_Open_Image.style.display='inline'; Codehighlighter1_1049_1280_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1049_1280_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1049_1280_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regerror(z,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg,&nbsp;ebuf,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ebuf));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s:&nbsp;regcom('%s')\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ebuf,&nbsp;lbuf);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pm[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].rm_so</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%04d:&nbsp;%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;lno,&nbsp;lbuf);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;x&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nmatch&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;pm[x].rm_so&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;x)<br><img id=Codehighlighter1_1461_1656_Open_Image onclick="this.style.display='none'; Codehighlighter1_1461_1656_Open_Text.style.display='none'; Codehighlighter1_1461_1656_Closed_Image.style.display='inline'; Codehighlighter1_1461_1656_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1461_1656_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1461_1656_Closed_Text.style.display='none'; Codehighlighter1_1461_1656_Open_Image.style.display='inline'; Codehighlighter1_1461_1656_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1461_1656_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1461_1656_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mstr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strndup(lbuf&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;pm[x].rm_so,&nbsp;pm[x].rm_eo</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">pm[x].rm_so);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;$%d:&nbsp;%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;x,&nbsp;mstr);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(mstr);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fflush(stdout);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regfree(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
下面是对正则表达式&#8220;[\[][^\[\]]*[\]][#|$] &#8221; 的测试，显然不符合要求。
<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"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[\[][^\[\]]*[\]][#|$]&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">[root@localhost&nbsp;bin]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">not&nbsp;match<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">[a\]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0005</span><span style="COLOR: #000000">:&nbsp;[a\]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;[a\]#&nbsp;</span></div>
从简单的开始先测试左括号&#8220;[&#8221;的匹配：
<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"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[\[]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">a<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">not&nbsp;match<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">[<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0002</span><span style="COLOR: #000000">:&nbsp;[<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;[<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">[root@localhost&nbsp;bin]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0003</span><span style="COLOR: #000000">:&nbsp;[root@localhost&nbsp;bin]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;[</span></div>
再测试右括号&#8220;]&#8221;：
<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"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[\]]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">not&nbsp;match<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">\]&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0002</span><span style="COLOR: #000000">:&nbsp;\]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;\]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">-----------------</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[]]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">]]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">:&nbsp;]]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;]]</span></div>
两个简单的正则表达式可以看出：regex中左方括号需要转义，右方括号不需要转义。<br>下面我们再来测试匹配一下任意非方括号字符：
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[^\[]]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&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"></span><span style="COLOR: #000000">[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">:&nbsp;[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;c]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[^\[\]]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&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"></span><span style="COLOR: #000000">[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">:&nbsp;[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;c]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[^]\[]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&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"></span><span style="COLOR: #000000">[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">:&nbsp;[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;abc</span></div>
通过上面测试可以得出正确的正则表达式来匹配Linux命令行提示符——&#8220;[\[][^]\[]*[]][#$] &#8221;或&#8220;\[[^]\[]*][#$] &#8221;。
<img src ="http://www.cppblog.com/volant/aggbug/112314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2010-04-12 13:14 <a href="http://www.cppblog.com/volant/archive/2010/04/12/112314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]标准C函数：strncpy</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87973.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 18 Jun 2009 06:38:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/18/87973.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87973.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87973.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87973.html</trackback:ping><description><![CDATA[
前两天看libsmi源代码，里面对strncpy函数进行了封装，感觉有些缺陷，虽然内部使用的函数，满足要求就可以了，但想了想发现自己它了解的也不是很多。
关于strncpy，《C程序设计语言》中是这样介绍的：&#8220;char *strncpy(s, ct, n)，strncpy用于把字符串ct中最多n个字符拷贝到字符串s中，并返回s。如果ct中少于n个字符，那么就用&#8217;\0&#8217;补充。&#8221;
写了一个简单的程序对strncpy进行测试。<img src="http://blog.csdn.net/volant_hoo/aggbug/4167919.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4167919.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4167919.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-18 14:38 <a href="http://www.cppblog.com/volant/archive/2009/06/18/87973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]GCC C语言扩展（1）</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87972.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 18 Jun 2009 06:38:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/18/87972.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87972.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87972.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87972.html</trackback:ping><description><![CDATA[
看开源的代码中发现了一些静态函数声明后有如下内容：__attribute__ ((constructor))这是gcc的扩展属性。<img src="http://blog.csdn.net/volant_hoo/aggbug/4169081.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169081.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169081.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-18 14:38 <a href="http://www.cppblog.com/volant/archive/2009/06/18/87972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]从一到面试题谈起</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87970.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 18 Jun 2009 06:38:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/18/87970.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87970.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87970.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87970.html</trackback:ping><description><![CDATA[
最近看CSDN，又谈到一道面试题，大致是&#8220;不使用比较运算符和库函数比较两个整数的大小&#8221;。这种题看似简单，实则深藏玄机，考得不只是技巧还有很多基础知识。<img src="http://blog.csdn.net/volant_hoo/aggbug/4169108.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169108.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169108.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-18 14:38 <a href="http://www.cppblog.com/volant/archive/2009/06/18/87970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]共享内存</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87971.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 18 Jun 2009 06:38:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/18/87971.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87971.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87971.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87971.html</trackback:ping><description><![CDATA[
进程间通信知识了解不少，今天第一次正式使用，就出问题了。
看看共享内存的原理，操作系统把一块公共的内存区域，映射到进程内存空间中，但映射的内存地址并不能保证映射后的地址一致性（其实一致的可能性很小，基本没有成功过），而此处array执行的地址为创建共享内存进程中正确的数组地址，在新的进程中就不对了。
因此在共享内存中，需要慎重使用指针变量。对于本文中的问题修改很简单，删除int *array，每次使用结构的地址跳过这些额外信息即可，可通过下面的宏函数得到数据域的指针。
<img src="http://blog.csdn.net/volant_hoo/aggbug/4169093.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169093.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169093.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-18 14:38 <a href="http://www.cppblog.com/volant/archive/2009/06/18/87971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gtest的一个简单扩展（运行时间测试）的实例</title><link>http://www.cppblog.com/volant/archive/2008/08/27/60203.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Wed, 27 Aug 2008 15:34:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2008/08/27/60203.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/60203.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2008/08/27/60203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/60203.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/60203.html</trackback:ping><description><![CDATA[<p>上一篇中对gtest进行了一个简单的扩展，本文通过实例测试并介绍这个扩展的用法。</p>
<p>首先实现两个Fibonacci函数，然后对这两个函数进行测试：</p>
<p>Fibonacci_1，使用循环实现：<br /></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Fibonacci_1(unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n)<br /><img id="Codehighlighter1_41_211_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_211_Open_Text.style.display='none'; Codehighlighter1_41_211_Closed_Image.style.display='inline'; Codehighlighter1_41_211_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_41_211_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_211_Closed_Text.style.display='none'; Codehighlighter1_41_211_Open_Image.style.display='inline'; Codehighlighter1_41_211_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_41_211_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_41_211_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;f0&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;f1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;f2;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img id="Codehighlighter1_132_194_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_194_Open_Text.style.display='none'; Codehighlighter1_132_194_Closed_Image.style.display='inline'; Codehighlighter1_132_194_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_132_194_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_132_194_Closed_Text.style.display='none'; Codehighlighter1_132_194_Open_Image.style.display='inline'; Codehighlighter1_132_194_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_132_194_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_132_194_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;f0&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;f1;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f0&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;f1;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;f2;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;f1;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />Fibonacci_2，使用递归实现：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Fibonacci_2(unsigned&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n)<br /><img id="Codehighlighter1_41_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_223_Open_Text.style.display='none'; Codehighlighter1_41_223_Closed_Image.style.display='inline'; Codehighlighter1_41_223_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_41_223_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_223_Closed_Text.style.display='none'; Codehighlighter1_41_223_Open_Image.style.display='inline'; Codehighlighter1_41_223_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_41_223_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_41_223_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">switch</span><span style="color: #000000">&nbsp;(n)<br /><img id="Codehighlighter1_62_221_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_221_Open_Text.style.display='none'; Codehighlighter1_62_221_Closed_Image.style.display='inline'; Codehighlighter1_62_221_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_62_221_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_62_221_Closed_Text.style.display='none'; Codehighlighter1_62_221_Open_Image.style.display='inline'; Codehighlighter1_62_221_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_62_221_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_62_221_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">:<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">:<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">:<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Fibonacci_2(n&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Fibonacci_2(n&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />测试用例：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">TEST_T(Fibonacci_Recursive,&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">)<br /><img id="Codehighlighter1_32_77_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_77_Open_Text.style.display='none'; Codehighlighter1_32_77_Closed_Image.style.display='inline'; Codehighlighter1_32_77_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_32_77_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_32_77_Closed_Text.style.display='none'; Codehighlighter1_32_77_Open_Image.style.display='inline'; Codehighlighter1_32_77_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_32_77_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_32_77_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Fibonacci_2(</span><span style="color: #000000">30</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_TIME(</span><span style="color: #000000">0.1</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />TEST_T(Fibonacci_Loop,&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">)<br /><img id="Codehighlighter1_107_152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_107_152_Open_Text.style.display='none'; Codehighlighter1_107_152_Closed_Image.style.display='inline'; Codehighlighter1_107_152_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_107_152_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_107_152_Closed_Text.style.display='none'; Codehighlighter1_107_152_Open_Image.style.display='inline'; Codehighlighter1_107_152_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_107_152_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_107_152_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Fibonacci_1(</span><span style="color: #000000">30</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_TIME(</span><span style="color: #000000">0.1</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />TEST_T(Fibonacci_Recursive,&nbsp;</span><span style="color: #000000">40</span><span style="color: #000000">)<br /><img id="Codehighlighter1_187_303_Open_Image" onclick="this.style.display='none'; Codehighlighter1_187_303_Open_Text.style.display='none'; Codehighlighter1_187_303_Closed_Image.style.display='inline'; Codehighlighter1_187_303_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_187_303_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_187_303_Closed_Text.style.display='none'; Codehighlighter1_187_303_Open_Image.style.display='inline'; Codehighlighter1_187_303_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_187_303_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_187_303_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TEST_T_SHOWTIME();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Fibonacci_2(</span><span style="color: #000000">40</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;EXCEPT_TIME(</span><span style="color: #000000">0.1</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_TIME(</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">\nUsed&nbsp;too&nbsp;long&nbsp;time!</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />TEST_T(Fibonacci_Loop,&nbsp;</span><span style="color: #000000">40</span><span style="color: #000000">)<br /><img id="Codehighlighter1_333_449_Open_Image" onclick="this.style.display='none'; Codehighlighter1_333_449_Open_Text.style.display='none'; Codehighlighter1_333_449_Closed_Image.style.display='inline'; Codehighlighter1_333_449_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_333_449_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_333_449_Closed_Text.style.display='none'; Codehighlighter1_333_449_Open_Image.style.display='inline'; Codehighlighter1_333_449_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_333_449_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_333_449_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TEST_T_SHOWTIME();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Fibonacci_1(</span><span style="color: #000000">40</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;EXCEPT_TIME(</span><span style="color: #000000">0.1</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_TIME(</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">\nUsed&nbsp;too&nbsp;long&nbsp;time!</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />测试结果：</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">[</span><span style="color: #000000">==========</span><span style="color: #000000">]&nbsp;Running&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">&nbsp;tests&nbsp;from&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;test&nbsp;cases.<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[</span><span style="color: #000000">----------</span><span style="color: #000000">]&nbsp;Global&nbsp;test&nbsp;environment&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">-</span><span style="color: #000000">up.<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[</span><span style="color: #000000">----------</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;tests&nbsp;from&nbsp;TIME_Fibonacci_Recursive<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;RUN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;TIME_Fibonacci_Recursive.</span><span style="color: #000000">30</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK&nbsp;]&nbsp;TIME_Fibonacci_Recursive.</span><span style="color: #000000">30</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;RUN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;TIME_Fibonacci_Recursive.</span><span style="color: #000000">40</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />FibonacciTest.cpp:</span><span style="color: #000000">47</span><span style="color: #000000">:&nbsp;Failure<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />Failed<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />Time:&nbsp;running&nbsp;</span><span style="color: #000000">2.9995</span><span style="color: #000000">(s)&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.1</span><span style="color: #000000">(s)<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />FibonacciTest.cpp:</span><span style="color: #000000">48</span><span style="color: #000000">:&nbsp;Failure<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />Failed<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />Time:&nbsp;running&nbsp;</span><span style="color: #000000">2.9995</span><span style="color: #000000">(s)&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">(s)<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />Used&nbsp;too&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;time</span><span style="color: #000000">!</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;&nbsp;TIME&nbsp;&nbsp;&nbsp;]&nbsp;used&nbsp;time:&nbsp;</span><span style="color: #000000">2.9995</span><span style="color: #000000">(s)<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;FAILED&nbsp;&nbsp;]&nbsp;TIME_Fibonacci_Recursive.</span><span style="color: #000000">40</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[</span><span style="color: #000000">----------</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;tests&nbsp;from&nbsp;TIME_Fibonacci_Loop<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;RUN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;TIME_Fibonacci_Loop.</span><span style="color: #000000">30</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK&nbsp;]&nbsp;TIME_Fibonacci_Loop.</span><span style="color: #000000">30</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;RUN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;TIME_Fibonacci_Loop.</span><span style="color: #000000">40</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;&nbsp;TIME&nbsp;&nbsp;&nbsp;]&nbsp;used&nbsp;time:&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">(s)<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK&nbsp;]&nbsp;TIME_Fibonacci_Loop.</span><span style="color: #000000">40</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[</span><span style="color: #000000">----------</span><span style="color: #000000">]&nbsp;Global&nbsp;test&nbsp;environment&nbsp;tear</span><span style="color: #000000">-</span><span style="color: #000000">down<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[</span><span style="color: #000000">==========</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">&nbsp;tests&nbsp;from&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;test&nbsp;cases&nbsp;ran.<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;PASSED&nbsp;&nbsp;]&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;tests.<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;FAILED&nbsp;&nbsp;]&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;test,&nbsp;listed&nbsp;below:<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />[&nbsp;&nbsp;FAILED&nbsp;&nbsp;]&nbsp;TIME_Fibonacci_Recursive.</span><span style="color: #000000">40</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;</p>
实例中测试了四个测试用例，分别测试了两个函数分别计算Fibonacci(30)和Fibonacci(40)所花费的时间。测试用例1、2比较简单，仅有一个ASSERT_TIME断言用于测试运行到此该测试用例花费的时间。测试用例3、4，增加了两条语句：TEST_T_SHOWTIME()，测试用例结束后打印执行时间；EXCEPT_TIME断言，这里只是测试以下EXCEPT_TIME和ASSERT_TIME的区别，前者继续执行后续语句，后者则结束当前的测试用例。<img src ="http://www.cppblog.com/volant/aggbug/60203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2008-08-27 23:34 <a href="http://www.cppblog.com/volant/archive/2008/08/27/60203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gtest的一个简单扩展</title><link>http://www.cppblog.com/volant/archive/2008/08/27/60201.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Wed, 27 Aug 2008 15:14:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2008/08/27/60201.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/60201.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2008/08/27/60201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/60201.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/60201.html</trackback:ping><description><![CDATA[<p>看了gtest的一个simple，其中有测试运行时间的方法，但使用起来稍微负责，因此做了一个简单的扩展。</p>
<p>扩展内容：<br />1. TEST_T(test_case_name, test_name)，用于定义运行时间测试用例。<br />2. TEST_T_SHOWTIME()，打开打印测试用例运行时间打印开关。<br />3. EXCEPT_TIME(second)和ASSERT_TIME(second)，断言，second为double类型，测试运行时间是否小于second。</p>
<p>使用说明：<br />向正常使用一样，只是在需要时间测试时include &#8220;gtest_e.h&#8221;即可，当然也得把相应的库链接到执行文件中。</p>
<p>具体实现：<br />源文件gtest_e.h----</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_19_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_19_Open_Text.style.display='none'; Codehighlighter1_0_19_Closed_Image.style.display='inline'; Codehighlighter1_0_19_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_0_19_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_19_Closed_Text.style.display='none'; Codehighlighter1_0_19_Open_Image.style.display='inline'; Codehighlighter1_0_19_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span id="Codehighlighter1_0_19_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_19_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">*<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;gtest_e.h<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />#ifndef&nbsp;GTEST_E_H_<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;GTEST_E_H_</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">gtest_time.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;TEST_T(test_case_name,&nbsp;test_name)\</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;GTEST_TEST(TIME_##test_case_name,&nbsp;test_name,&nbsp;::TimeTest)<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;TEST_T_SHOWTIME()&nbsp;TimeTest_setShowFlag(1)</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;ASSERT_TIME(time)&nbsp;if(TimeTest_setTimePoint()&nbsp;-&nbsp;time&nbsp;&gt;&nbsp;0)&nbsp;\</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;FAIL()&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Time:&nbsp;running&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;TimeTest_getTime()&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">(s)&nbsp;&gt;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;time&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">(s)</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;EXCEPT_TIME(time)&nbsp;if(TimeTest_setTimePoint()&nbsp;-&nbsp;time&nbsp;&gt;&nbsp;0)&nbsp;\</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ADD_FAILURE()&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Time:&nbsp;running&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;TimeTest_getTime()&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">(s)&nbsp;&gt;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;time&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">(s)</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#endif</span><span style="color: #000000">&nbsp;/*&nbsp;GTEST_E_H_&nbsp;*/</span></div>
源文件gtest_time.h----<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_22_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_22_Open_Text.style.display='none'; Codehighlighter1_0_22_Closed_Image.style.display='inline'; Codehighlighter1_0_22_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_0_22_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_22_Closed_Text.style.display='none'; Codehighlighter1_0_22_Open_Image.style.display='inline'; Codehighlighter1_0_22_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span id="Codehighlighter1_0_22_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_22_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">*<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;gtest_time.h<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />#ifndef&nbsp;GTEST_TIME_H_<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;GTEST_TIME_H_</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">gtest</span><span style="color: #000000">/</span><span style="color: #000000">gtest.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TimeTest:&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;testing::Test<br /><img id="Codehighlighter1_133_490_Open_Image" onclick="this.style.display='none'; Codehighlighter1_133_490_Open_Text.style.display='none'; Codehighlighter1_133_490_Closed_Image.style.display='inline'; Codehighlighter1_133_490_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_133_490_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_133_490_Closed_Text.style.display='none'; Codehighlighter1_133_490_Open_Image.style.display='inline'; Codehighlighter1_133_490_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_133_490_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_133_490_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;TimeTest_setShowFlag(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;flag)<br /><img id="Codehighlighter1_194_227_Open_Image" onclick="this.style.display='none'; Codehighlighter1_194_227_Open_Text.style.display='none'; Codehighlighter1_194_227_Closed_Image.style.display='inline'; Codehighlighter1_194_227_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_194_227_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_194_227_Closed_Text.style.display='none'; Codehighlighter1_194_227_Open_Image.style.display='inline'; Codehighlighter1_194_227_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_194_227_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_194_227_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show_time_&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;flag;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;TimeTest_getTime()<br /><img id="Codehighlighter1_271_317_Open_Image" onclick="this.style.display='none'; Codehighlighter1_271_317_Open_Text.style.display='none'; Codehighlighter1_271_317_Closed_Image.style.display='inline'; Codehighlighter1_271_317_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_271_317_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_271_317_Closed_Text.style.display='none'; Codehighlighter1_271_317_Open_Image.style.display='inline'; Codehighlighter1_271_317_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_271_317_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_271_317_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;end_time_&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;start_time_;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;TimeTest_setTimePoint();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">protected</span><span style="color: #000000">:<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;start_time_;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;end_time_;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;show_time_;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">virtual</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;SetUp();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">virtual</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;TearDown();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#endif</span><span style="color: #000000">&nbsp;/*&nbsp;GTEST_TIME_H_&nbsp;*/</span></div>
源文件gtest_time.cpp----<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_24_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_24_Open_Text.style.display='none'; Codehighlighter1_0_24_Closed_Image.style.display='inline'; Codehighlighter1_0_24_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_0_24_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_24_Closed_Text.style.display='none'; Codehighlighter1_0_24_Open_Image.style.display='inline'; Codehighlighter1_0_24_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span id="Codehighlighter1_0_24_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_24_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">*<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;gtest_time.cpp<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">gtest_time.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#if</span><span style="color: #000000">&nbsp;defined(WIN32)</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">sys</span><span style="color: #000000">/</span><span style="color: #000000">timeb.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;now()<br /><img id="Codehighlighter1_149_275_Open_Image" onclick="this.style.display='none'; Codehighlighter1_149_275_Open_Text.style.display='none'; Codehighlighter1_149_275_Closed_Image.style.display='inline'; Codehighlighter1_149_275_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_149_275_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_149_275_Closed_Text.style.display='none'; Codehighlighter1_149_275_Open_Image.style.display='inline'; Codehighlighter1_149_275_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_149_275_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_149_275_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;_timeb&nbsp;current;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;_ftime(</span><span style="color: #000000">&amp;</span><span style="color: #000000">current);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(((</span><span style="color: #0000ff">double</span><span style="color: #000000">)&nbsp;current.time)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">1.0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;current.millitm)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.000001</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#else</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;now()<br /><img id="Codehighlighter1_296_438_Open_Image" onclick="this.style.display='none'; Codehighlighter1_296_438_Open_Text.style.display='none'; Codehighlighter1_296_438_Closed_Image.style.display='inline'; Codehighlighter1_296_438_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_296_438_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_296_438_Closed_Text.style.display='none'; Codehighlighter1_296_438_Open_Image.style.display='inline'; Codehighlighter1_296_438_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_296_438_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_296_438_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;timeval&nbsp;current;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(</span><span style="color: #000000">&amp;</span><span style="color: #000000">current,&nbsp;NULL);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(((</span><span style="color: #0000ff">double</span><span style="color: #000000">)&nbsp;current.tv_sec)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1.0e-6</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;((</span><span style="color: #0000ff">double</span><span style="color: #000000">)&nbsp;current.tv_usec));<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">#endif</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;TimeTest::SetUp()<br /><img id="Codehighlighter1_471_546_Open_Image" onclick="this.style.display='none'; Codehighlighter1_471_546_Open_Text.style.display='none'; Codehighlighter1_471_546_Closed_Image.style.display='inline'; Codehighlighter1_471_546_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_471_546_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_471_546_Closed_Text.style.display='none'; Codehighlighter1_471_546_Open_Image.style.display='inline'; Codehighlighter1_471_546_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_471_546_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_471_546_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;start_time_&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;now();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;end_time_&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TimeTest_setShowFlag(</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;TimeTest::TearDown()<br /><img id="Codehighlighter1_575_751_Open_Image" onclick="this.style.display='none'; Codehighlighter1_575_751_Open_Text.style.display='none'; Codehighlighter1_575_751_Closed_Image.style.display='inline'; Codehighlighter1_575_751_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_575_751_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_575_751_Closed_Text.style.display='none'; Codehighlighter1_575_751_Open_Image.style.display='inline'; Codehighlighter1_575_751_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_575_751_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_575_751_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(show_time_)<br /><img id="Codehighlighter1_601_749_Open_Image" onclick="this.style.display='none'; Codehighlighter1_601_749_Open_Text.style.display='none'; Codehighlighter1_601_749_Closed_Image.style.display='inline'; Codehighlighter1_601_749_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_601_749_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_601_749_Closed_Text.style.display='none'; Codehighlighter1_601_749_Open_Image.style.display='inline'; Codehighlighter1_601_749_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_601_749_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_601_749_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;used_time&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;TimeTest_setTimePoint();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">[&nbsp;&nbsp;&nbsp;TIME&nbsp;&nbsp;&nbsp;]&nbsp;used&nbsp;time:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;used_time&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">(s)</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;TimeTest::TimeTest_setTimePoint()<br /><img id="Codehighlighter1_795_851_Open_Image" onclick="this.style.display='none'; Codehighlighter1_795_851_Open_Text.style.display='none'; Codehighlighter1_795_851_Closed_Image.style.display='inline'; Codehighlighter1_795_851_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_795_851_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_795_851_Closed_Text.style.display='none'; Codehighlighter1_795_851_Open_Image.style.display='inline'; Codehighlighter1_795_851_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_795_851_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_795_851_Open_Text"><span style="color: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;end_time_&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;now();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;TimeTest_getTime();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />以上内容只是一个简单的实现，没有过多的测试，且时间精度不够，误差较大。<img src ="http://www.cppblog.com/volant/aggbug/60201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2008-08-27 23:14 <a href="http://www.cppblog.com/volant/archive/2008/08/27/60201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gtest（google的c++单元测试）试用</title><link>http://www.cppblog.com/volant/archive/2008/07/31/57620.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 31 Jul 2008 04:52:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2008/07/31/57620.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/57620.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2008/07/31/57620.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/57620.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/57620.html</trackback:ping><description><![CDATA[google开源了c++单元测试框架，真让人兴奋。安装的过程比较简单，在eclipse+mingw+cygwin下很easy就搞定了。使用也很容易，按照sample不用看文档也能很快上手。过程就不多少了，记点东西备忘。<br /><br />断言：<br />ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition为真<br />ASSERT_FALSE(condition);&nbsp;&nbsp;&nbsp; EXPECT_FALSE(condition);&nbsp;&nbsp;&nbsp; condition为假<br /><br />ASSERT_EQ(expected, actual);&nbsp;&nbsp;&nbsp; EXPECT_EQ(expected, actual);&nbsp;&nbsp;&nbsp; expected == actual<br />ASSERT_NE(val1, val2);&nbsp; EXPECT_NE(val1, val2);&nbsp; val1 != val2<br />ASSERT_LT(val1, val2);&nbsp; EXPECT_LT(val1, val2);&nbsp; val1 &lt; val2<br />ASSERT_LE(val1, val2);&nbsp; EXPECT_LE(val1, val2);&nbsp; val1 &lt;= val2<br />ASSERT_GT(val1, val2);&nbsp; EXPECT_GT(val1, val2);&nbsp; val1 &gt; val2<br />ASSERT_GE(val1, val2);&nbsp; EXPECT_GE(val1, val2);&nbsp; val1 &gt;= val2<br /><br />ASSERT_STREQ(expected_str, actual_str); EXPECT_STREQ(expected_str, actual_str); 两个C字符串有相同的内容<br />ASSERT_STRNE(str1, str2);&nbsp;&nbsp; EXPECT_STRNE(str1, str2); 两个C字符串有不同的内容<br />ASSERT_STRCASEEQ(expected_str, actual_str); EXPECT_STRCASEEQ(expected_str, actual_str); 两个C字符串有相同的内容，忽略大小写<br />ASSERT_STRCASENE(str1, str2);&nbsp;&nbsp; EXPECT_STRCASENE(str1, str2);&nbsp;&nbsp; 两个C字符串有不同的内容，忽略大小写<br /><br />头文件：<br />#include &lt;gtest/gtest.h&gt;<br /><br />main：<br />&nbsp;&nbsp;&nbsp; testing::InitGoogleTest(&amp;argc, argv);<br />&nbsp;&nbsp;&nbsp; return RUN_ALL_TESTS();<br /><br />库：<br />&nbsp;&nbsp;&nbsp; -lgtest<br /><br /><img src ="http://www.cppblog.com/volant/aggbug/57620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2008-07-31 12:52 <a href="http://www.cppblog.com/volant/archive/2008/07/31/57620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]搭建cppunit单元测试环境</title><link>http://www.cppblog.com/volant/archive/2008/06/02/57611.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Mon, 02 Jun 2008 10:30:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2008/06/02/57611.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/57611.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2008/06/02/57611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/57611.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/57611.html</trackback:ping><description><![CDATA[做了几年C/C++开发，一直想要把单元测试加上，因为工作安排，做了一小段时间的java，更坚定了搭建c++单元测试环境的想法，但不得不说cppunit的配置实在是有些繁琐，MinGW的安装还好说，cygwin安装实在是太慢，可怜的网速让我数次终止了它的安装，幸运的是在公司的电脑上居然发现了cygwin的安装包，于是就开始了我的cppunit的测试旅程。<img height="1" src="http://blog.csdn.net/volant_hoo/aggbug/2502339.aspx" width="1"  alt="" /><br />文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2008/06/02/2502339.aspx">http://blog.csdn.net/volant_hoo/archive/2008/06/02/2502339.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/57611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2008-06-02 18:30 <a href="http://www.cppblog.com/volant/archive/2008/06/02/57611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]经典算法——求最大子序列和(2) </title><link>http://www.cppblog.com/volant/archive/2008/04/07/57614.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Mon, 07 Apr 2008 12:16:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2008/04/07/57614.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/57614.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2008/04/07/57614.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/57614.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/57614.html</trackback:ping><description><![CDATA[这是我面试的时候想到的算法的实现，使用分治法，算法复杂度为O(n*log(n))。算法描述如下： 对于每一个划分子序列需要获取4个数值： sum（子序列和）、maxSum（最大子序列和）、lMaxSum（最大的含有最左侧节点的子序列和）、rMaxSum（最大的含有最右侧节点的子序列和） 递归算法（res为需要运算的结果，lRes、rRes分别为该段的左右划分）： res-&gt;sum = lRes-&gt;sum + rRes-&gt;sum; res-&gt;lMaxSum = max(lRes-&gt;lMaxSum, lRes-&gt;sum + rRes-&gt;lMaxSum); res-&gt;rMaxSum = max(rRes-&gt;rMaxSum, rRes-&gt;sum + lRes-&gt;rMaxSum); res-&gt;maxSum = max3(lRes-&gt;maxSum, rRes-&gt;maxSum, lRes-&gt;rMaxSum + r<img height="1" src="http://blog.csdn.net/volant_hoo/aggbug/2256611.aspx" width="1"  alt="" /><br />文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2008/04/07/2256611.aspx">http://blog.csdn.net/volant_hoo/archive/2008/04/07/2256611.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/57614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2008-04-07 20:16 <a href="http://www.cppblog.com/volant/archive/2008/04/07/57614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]经典算法——求最大子序列和(1)</title><link>http://www.cppblog.com/volant/archive/2008/04/05/57615.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Fri, 04 Apr 2008 23:54:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2008/04/05/57615.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/57615.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2008/04/05/57615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/57615.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/57615.html</trackback:ping><description><![CDATA[比较经典的算法问题，能够很好的体现动态规划的实现，以一点&#8220;画龙点睛&#8221; 大大精简了算法复杂度，且实现简单。本文中实现了4种&#8212;&#8212;一般、简单优化过的算法、分治法优化的算法、动态规划的算法。<img height="1" src="http://blog.csdn.net/volant_hoo/aggbug/2252490.aspx" width="1"  alt="" /><br />文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2008/04/04/2252490.aspx">http://blog.csdn.net/volant_hoo/archive/2008/04/04/2252490.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/57615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2008-04-05 07:54 <a href="http://www.cppblog.com/volant/archive/2008/04/05/57615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>