??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久亚洲AV无码专区网站,久久精品国产亚洲AV不卡,亚洲午夜无码久久久久小说http://m.shnenglu.com/Backkom-Li/category/2262.html --Backkom-Lizh-cnMon, 19 May 2008 23:27:14 GMTMon, 19 May 2008 23:27:14 GMT60关于默认初始?/title><link>http://m.shnenglu.com/Backkom-Li/archive/2008/02/28/43386.html</link><dc:creator>在寒风中叶落</dc:creator><author>在寒风中叶落</author><pubDate>Thu, 28 Feb 2008 06:16:00 GMT</pubDate><guid>http://m.shnenglu.com/Backkom-Li/archive/2008/02/28/43386.html</guid><wfw:comment>http://m.shnenglu.com/Backkom-Li/comments/43386.html</wfw:comment><comments>http://m.shnenglu.com/Backkom-Li/archive/2008/02/28/43386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Backkom-Li/comments/commentRss/43386.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Backkom-Li/services/trackbacks/43386.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">::std;<br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">in function ,will be initialized.Include main fuction.<br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #008000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">out of function, willn't be. </span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #008000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> fun()<br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id=Codehighlighter1_143_296_Open_Image onclick="this.style.display='none'; Codehighlighter1_143_296_Open_Text.style.display='none'; Codehighlighter1_143_296_Closed_Image.style.display='inline'; Codehighlighter1_143_296_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_143_296_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_296_Closed_Text.style.display='none'; Codehighlighter1_143_296_Open_Image.style.display='inline'; Codehighlighter1_143_296_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_143_296_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://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_143_296_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img id=Codehighlighter1_161_162_Open_Image onclick="this.style.display='none'; Codehighlighter1_161_162_Open_Text.style.display='none'; Codehighlighter1_161_162_Closed_Image.style.display='inline'; Codehighlighter1_161_162_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_161_162_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_161_162_Closed_Text.style.display='none'; Codehighlighter1_161_162_Open_Image.style.display='inline'; Codehighlighter1_161_162_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>     </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> A[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id=Codehighlighter1_161_162_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://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_161_162_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">call initialize</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #008000"><img id=Codehighlighter1_198_200_Open_Image onclick="this.style.display='none'; Codehighlighter1_198_200_Open_Text.style.display='none'; Codehighlighter1_198_200_Closed_Image.style.display='inline'; Codehighlighter1_198_200_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_198_200_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_198_200_Closed_Text.style.display='none'; Codehighlighter1_198_200_Open_Image.style.display='inline'; Codehighlighter1_198_200_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">     </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> C[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id=Codehighlighter1_198_200_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://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_198_200_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>     cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">funA:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">A[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">A[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>     cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">funC:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">C[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">C[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl;     <br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> B[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main()<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_319_506_Open_Image onclick="this.style.display='none'; Codehighlighter1_319_506_Open_Text.style.display='none'; Codehighlighter1_319_506_Closed_Image.style.display='inline'; Codehighlighter1_319_506_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_319_506_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_319_506_Closed_Text.style.display='none'; Codehighlighter1_319_506_Open_Image.style.display='inline'; Codehighlighter1_319_506_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_319_506_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://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_319_506_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> A[</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">];</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> in main function</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">    fun();<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">main funA:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">A[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">A[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl;      <br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    cout </span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GlobalB:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">B[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">B[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl;      <br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    getchar();<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;    <br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span></div> <img height=121 alt="" src="http://m.shnenglu.com/images/cppblog_com/backkom-li/|络日志囄/08_02_28_2.jpg" width=272 border=0><br> <img src ="http://m.shnenglu.com/Backkom-Li/aggbug/43386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Backkom-Li/" target="_blank">在寒风中叶落</a> 2008-02-28 14:16 <a href="http://m.shnenglu.com/Backkom-Li/archive/2008/02/28/43386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于条g表达?? :http://m.shnenglu.com/Backkom-Li/archive/2008/02/28/43384.html在寒风中叶落在寒风中叶落Thu, 28 Feb 2008 05:46:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2008/02/28/43384.htmlhttp://m.shnenglu.com/Backkom-Li/comments/43384.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2008/02/28/43384.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/43384.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/43384.html1int a =2, b=3, c = 5, d = 6, e = 0, f = 9;    
2= a > b? 
3     (c = 6, d = 7)
4     :(c = 7, d = 8, f);
5cout <<c<<d<<e; 

在寒风中叶落 2008-02-28 13:46 发表评论
]]>
字符串数l以及结构体http://m.shnenglu.com/Backkom-Li/archive/2008/01/29/42148.html在寒风中叶落在寒风中叶落Tue, 29 Jan 2008 12:45:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2008/01/29/42148.htmlhttp://m.shnenglu.com/Backkom-Li/comments/42148.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2008/01/29/42148.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/42148.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/42148.html 1char* test[] = {"1""12""123"};
 2 int a,b,c, d, e;
 3 a = sizeof(test);
 4 b = sizeof(test[0]);
 5 c = sizeof(test[1]);
 6 d = sizeof(test[2]);
 7 e = a/b;
 8 char f = test[0][0];
 9 char g = test[0][1];
10 char h = test[0][2];
11 char i = test[0][3];
12 printf("a%d,b%d,c%d,d%d,e%d, f%d, g%d, h%d, i%d", a, b, c, d, e, f, g, h, i);
13 
14 typedef struct
15 {
16  char a[5];
17  char b[6];
18 }
teststruct;
19 
20 teststruct t1={"1""a"};
21 teststruct testst[]= {{"1""a"},{"12""ab"},{"123""abc"},{"1234""abcd"}};
22 teststruct t2;
23 printf("%s, %s, %s, %s", t2.a, t2.b, t1.a, t1.b);
24 printf("%d, %d, %d, %d, %d, %d", testst[1].a[0], testst[1].b[0], testst[1].a[1], testst[1].b[1], testst[1].a[4], testst[1].b[4]);
25

在寒风中叶落 2008-01-29 20:45 发表评论
]]>
[转] C++中extern “C”含义深层探?/title><link>http://m.shnenglu.com/Backkom-Li/archive/2007/11/20/37028.html</link><dc:creator>在寒风中叶落</dc:creator><author>在寒风中叶落</author><pubDate>Tue, 20 Nov 2007 09:39:00 GMT</pubDate><guid>http://m.shnenglu.com/Backkom-Li/archive/2007/11/20/37028.html</guid><wfw:comment>http://m.shnenglu.com/Backkom-Li/comments/37028.html</wfw:comment><comments>http://m.shnenglu.com/Backkom-Li/archive/2007/11/20/37028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Backkom-Li/comments/commentRss/37028.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Backkom-Li/services/trackbacks/37028.html</trackback:ping><description><![CDATA[<font size=2><strong>1.引言<br><br></strong>  C++语言的创建初h“a better C”Q但是这q不意味着C++中类似C语言的全局变量和函数所采用的编译和q接方式与C语言完全相同。作ZU欲与C兼容的语aQC++保留了一部分q程式语a的特点(被世人称?#8220;不彻底地面向对象”Q,因而它可以定义不属于Q何类的全局变量和函数。但是,C++毕竟是一U面向对象的E序设计语言Qؓ了支持函数的重蝲QC++对全局函数的处理方式与C有明昄不同?/font> <p><font size=2><strong>2.从标准头文g说v</strong><br>某企业曾l给出如下的一道面试题Qؓ什么标准头文g都有cM以下的结构? <br></font></p> <p><font size=2></font></p> <p clear=both><font size=2></font></p> <p class=code><font size=2>#ifndef __INCvxWorksh<br>#define __INCvxWorksh <br>#ifdef __cplusplus<br>extern "C" {<br>#endif <br>/*...*/ <br>#ifdef __cplusplus<br>}<br>#endif <br>#endif /* __INCvxWorksh */</font></p> <p class=code><font size=2>昄Q头文g中的~译?#8220;#ifndef __INCvxWorksh?define __INCvxWorksh?endif” 的作用是防止该头文g被重复引用。那?/font></p> <p class=code><br><font size=2>#ifdef __cplusplus<br>extern "C" {<br>#endif <br>#ifdef __cplusplus<br>}<br>#endif </font></p> <p><font size=2>的作用又是什么呢Q我们将在下文一一道来?/font></p> <p><font size=2><strong>3.深层揭密extern "C"<br><br></strong>  extern "C" 包含双重含义Q从字面上即可得刎ͼ首先Q被它修饰的目标?#8220;extern”的;其次Q被它修饰的目标?#8220;C”的。让我们来详l解读这两重含义?br><br>  被extern "C"限定的函数或变量是externcd的;<br><br>  extern是C/C++语言中表明函数和全局变量作用范围Q可见性)的关键字Q该关键字告诉编译器Q其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句Q?br></font></p> <p class=code><font size=2>  extern int a;</font></p> <p><br><font size=2>  仅仅是一个变量的声明Q其q不是在定义变量aQƈ未ؓa分配内存I间。变量a在所有模块中作ؓ一U全局变量只能被定义一ơ,否则会出现连接错误?br><br>  通常Q在模块的头文g中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块BƲ引用该模块A中定义的全局变量和函数时只需包含模块A的头文g卛_。这P模块B中调用模块A中的函数Ӟ在编译阶D,模块B虽然找不到该函数Q但是ƈ不会报错Q它会在q接阶段中从模块A~译生成的目标代码中扑ֈ此函数?br><br>  与extern对应的关键字是staticQ被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块用时Q其不可能被extern “C”修饰?br><br>  被extern "C"修饰的变量和函数是按照C语言方式~译和连接的Q?br><br>  <strong>未加extern “C”声明时的~译方式</strong><br><br>  首先看看C++中对cMC的函数是怎样~译的?br><br>  作ؓ一U面向对象的语言QC++支持函数重蝲Q而过E式语言C则不支持。函数被C++~译后在W号库中的名字与C语言的不同。例如,假设某个函数的原型ؓQ?<br></font></p> <p class=code><font size=2>void foo( int x, int y );</font></p> <p><br><font size=2>  该函数被C~译器编译后在符号库中的名字为_fooQ而C++~译器则会生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机Ӟ生成的新名字UCؓ“mangled name”Q?br><br>  <span style="COLOR: #ff00ff">_foo_int_intq样的名字包含了函数名、函数参数数量及cd信息QC++是靠这U机制来实现函数重蝲的?/span>例如Q在C++中,函数void foo( int x, int y )与void foo( int x, float y )~译生成的符h不相同的Q后者ؓ_foo_int_float?/font></p> <p><font size=2>同样圎ͼC++中的变量除支持局部变量外Q还支持cL员变量和全局变量。用h~写E序的类成员变量可能与全局变量同名Q我们以"."来区分。而本质上Q编译器在进行编译时Q与函数的处理相|也ؓcM的变量取了一个独一无二的名字,q个名字与用L序中同名的全局变量名字不同?br><br>  <strong>未加extern "C"声明时的q接方式</strong><br><br>  假设在C++中,模块A的头文g如下Q?br></font></p> <p class=code><font size=2>// 模块A头文件 moduleA.h<br>#ifndef MODULE_A_H<br>#define MODULE_A_H<br>int foo( int x, int y );<br>#endif</font></p> <p><br><font size=2>  在模块B中引用该函数Q?br></font></p> <p class=code><font size=2>// 模块B实现文g moduleB.cpp<br>#include "moduleA.h"<br>foo(2,3);</font></p> <p><br><font size=2>  实际上,<span style="COLOR: #ff00ff">在连接阶D,q接器会从模块A生成的目标文件moduleA.obj中寻找_foo_int_intq样的符P</span><br><br>  <strong>加extern "C"声明后的~译和连接方?/strong><br><br>  加extern "C"声明后,模块A的头文g变ؓQ?br></font></p> <p class=code><font size=2>// 模块A头文件 moduleA.h<br>#ifndef MODULE_A_H<br>#define MODULE_A_H<br>extern "C" int foo( int x, int y );<br>#endif</font></p> <p><br><font size=2>  在模块B的实现文件中仍然调用foo( 2,3 )Q其l果是:<br><br>  Q?Q模块A~译生成foo的目标代码时Q没有对其名字进行特D处理,采用了C语言的方式;<br><br>  Q?Q连接器在ؓ模块B的目标代码寻找foo(2,3)调用ӞL的是未经修改的符号名_foo?br><br>  如果在模块A中函数声明了foo为extern "C"cdQ而模块B中包含的是extern int foo( int x, int y ) Q则模块B找不到模块A中的函数Q反之亦然?br><br>  所以,可以用一句话概括extern “C”q个声明的真实目的(M语言中的M语法Ҏ的诞生都不是随意而ؓ的,来源于真实世界的需求驱动。我们在思考问题时Q不能只停留在这个语a是怎么做的Q还要问一问它Z么要q么做,动机是什么,q样我们可以更深入地理解许多问题Q:<br>  实现C++与C及其它语a的؜合编E?br>  明白了C++中extern "C"的设立动机,我们下面来具体分析extern "C"通常的用技巧?/font></p> <p><font size=2><strong>4.extern "C"的惯用法<br><br></strong>  Q?Q在C++中引用C语言中的函数和变量,在包含C语言头文Ӟ假设为cExample.hQ时Q需q行下列处理Q?br></font></p> <p class=code><font size=2>extern "C"<br>{<br>#include "cExample.h"<br>}</font></p> <p><br><font size=2>  而在C语言的头文g中,对其外部函数只能指定为externcdQC语言中不支持extern "C"声明Q在.c文g中包含了extern "C"时会出现~译语法错误?br><br>  W者编写的C++引用C函数例子工程中包含的三个文g的源代码如下Q?br></font></p> <p class=code><font size=2>/* c语言头文ӞcExample.h */<br>#ifndef C_EXAMPLE_H<br>#define C_EXAMPLE_H<br>extern int add(int x,int y);<br>#endif<br>/* c语言实现文gQcExample.c */<br>#include "cExample.h"<br>int add( int x, int y )<br>{<br>return x + y;<br>}<br>// c++实现文gQ调用addQcppFile.cpp<br>extern "C" <br>{<br>#include "cExample.h"<br>}<br>int main(int argc, char* argv[])<br>{<br>add(2,3); <br>return 0;<br>}</font></p> <p><br><font size=2>  如果C++调用一个C语言~写?DLLӞ当包?DLL的头文g或声明接口函数时Q应加extern "C" { }?br><br>  Q?Q在C中引用C++语言中的函数和变量时QC++的头文g需dextern "C"Q但是在C语言中不能直接引用声明了extern "C"的该头文Ӟ应该仅将C文g中将C++中定义的extern "C"函数声明为externcd?br>  W者编写的C引用C++函数例子工程中包含的三个文g的源代码如下Q?br></font></p> <p class=code><font size=2>//C++头文?cppExample.h<br>#ifndef CPP_EXAMPLE_H<br>#define CPP_EXAMPLE_H<br>extern "C" int add( int x, int y );<br>#endif<br>//C++实现文g cppExample.cpp<br>#include "cppExample.h"<br>int add( int x, int y )<br>{<br>return x + y;<br>}<br>/* C实现文g cFile.c<br>/* q样会编译出错:#include "cExample.h" */<br>extern int add( int x, int y );<br>int main( int argc, char* argv[] )<br>{<br>add( 2, 3 ); <br>return 0;<br>}</font></p> <p><br><font size=2>  如果深入理解了第3节中所阐述的extern "C"在编译和q接阶段发挥的作用,p真正理解本节所阐述的从C++引用C函数和C引用C++函数的惯用法。对W?节给出的CZ代码Q需要特别留意各个细节?br></font></p> <br><br> <p id=TBPingURL>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=763734</p> <img src ="http://m.shnenglu.com/Backkom-Li/aggbug/37028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Backkom-Li/" target="_blank">在寒风中叶落</a> 2007-11-20 17:39 <a href="http://m.shnenglu.com/Backkom-Li/archive/2007/11/20/37028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于sizeofhttp://m.shnenglu.com/Backkom-Li/archive/2006/12/13/16389.html在寒风中叶落在寒风中叶落Wed, 13 Dec 2006 12:12:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/12/13/16389.htmlhttp://m.shnenglu.com/Backkom-Li/comments/16389.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/12/13/16389.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/16389.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/16389.html      /* char 是最的可操作单?/span> */

    
char  str[ 20 ] = " 987654321 " ;
    
char   * ch  =  str;
    
char   * test  =   " 987654321 " ; sizeof.jpg

]]>
从别人那转的:100本计机l典书籍下蝲URL http://m.shnenglu.com/Backkom-Li/archive/2006/09/21/12802.html在寒风中叶落在寒风中叶落Thu, 21 Sep 2006 12:02:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/09/21/12802.htmlhttp://m.shnenglu.com/Backkom-Li/comments/12802.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/09/21/12802.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/12802.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/12802.html 1.vc++技术内q第四版 (潘爱?
ftp://210.32.157.56/课g/c++primer/vc++技术内qIV(潘爱?.rar
2.C++l典对话pd
中文Qhttp://www.jka77.com/book/cvst_cn.chm

3.MFC Windows E序设计(W二?
英文版:http://www.jka77.com/book/progmfc2.chm
中文版:暂无Q制作中...
4.Effective C++中文版:
http://dlb.pchome.net/development/reference/effectiveCplus.zip
5.More Effective C++中文?zhc?
http://cable.pchome.net/development/reference/MEC0410.zip

6.More Effective C++中文?候捷?
http://www.nethovel.com/resources/MoreEffectiveC++(WQ).zip

7.Essential C++中文??Q候捷?
http://www.nethovel.com/resources/Essential%20C++中文??.rar

8.深入出MFC 2/e
http://218.30.21.125:8084/ebook/programme/mfc2e.zip

9.代码大全中文?
http://www.delphidevelopers.com/docs/tecsubject/cc/CodeComplet110.zip

11.C++l典对话pd
中文Qhttp://www.jka77.com/book/cvst_cn.chm

12.MFC Windows E序设计(W二?
英文版:http://www.jka77.com/book/progmfc2.chm
中文版:暂无Q制作中...

13.数据l构 C++ 语言描述(中文?
http://www.code-labs.com/manual/c_c015.zip

14.Java~程思想中文?
ftp://202.118.72.12/pub/doc-book/Java/Java~程思想.zip

15.C++标准库英文版
ftp://166.111.64.4/incoming/新文件夹/f/The%20C++%20Standard%20Library(with%20TOC).pdf

16.Windows核心~程
英文Qhttp://www.fmdstudio.net/book/prgapps4.zip

17.TCP-IP详解?Q协?
ftp://202.204.4.161/学习资料/TCPIP/TCP-IP详解?Q协?pdf

18.TCP-IP详解?Q实?
ftp://202.204.4.161/学习资料/TCPIP/TCP-IP详解?QTCP事务协议QHTTPQNNTP.pdf

19.TCP-IP详解?QTCP事务协议
ftp://202.204.4.161/学习资料/TCPIP/TCP-IP详解?Q实?pdf

20.实用法的分析与E序设计
ftp://202.204.8.10/[4]%20~程资源/[%20书籍资料%20]/[法与数据结构]/实用法的分析与E序设计.rar

21.vc++技术内q第四版 (潘爱?
ftp://210.32.157.56/课g/c++primer/vc++技术内qIV(潘爱?.rar

22.C++ Primer英文版:
http://computerstep.w18.net/C/C++%20Primer.zip

23.Effective C++中文版:
http://dlb.pchome.net/development/reference/effectiveCplus.zip

24.More Effective C++中文?zhc?
http://cable.pchome.net/development/reference/MEC0410.zip

25.More Effective C++中文?候捷?
http://www.nethovel.com/resources/MoreEffectiveC++(WQ).zip

26.Essential C++中文??Q候捷?
http://www.nethovel.com/resources/Essential%20C++中文??.rar

27.Programming WindowsE式开发设计指南-Petzoldi?余孟??
中文版:http://www.nethovel.com/resources/ProgrammingWindows_tw.chm
英文版:http://www.nethovel.com/resources/Petzoldi.chm

28.WinAsm32汇编教程Q?Iczelion
http://www.nethovel.com/resources/winasm.chm

29.Windows 95 E序设计指南Q候捷?
http://www.nethovel.com/resources/win95adg.zip

30.Thinking in C++ 2nd Edition(C++~程思想)
英文版:http://www.nethovel.com/resources/ThinkinginC++.zip
中文版:http://www.dingbing.com/book/thinkc.zip

31.人月话Q中文版
http://www.goodassister.com/book/rysh.pdf

32.The C++ Programming Language英文
http://computerstep.w18.net/C/The%20C++%20Programming%20Language.rar

33.VC技术内q第五版 http://www.helpwork.com/downdata/book/programming/vc/book/vc++2/invcpp5.chm

34.com技术内q?
http://www.helpwork.com/book/html/user/download.asp?id=1123

35.comQ技术内q?
http://www.helpwork.com/book/html/user/download.asp?id=952

36.新编 Windows API参考大?
http://www.4046.com/nnsrc/down/WindowsAPIdq.rar

37.The C programming Language // By Brian W. Kernighan and Dennis M. Ritchie
下蝲地址Qhttp://www.jka77.com/book/The_C_programmin.chm

38.C语言~程手册
下蝲地址Qhttp://www.jka77.com/book/CL.chm

39.Delphi 7高效数据库程序设?
By 李维
下蝲地址:http://www.codestudy.net/book/download.asp?id=1163&sort=5

40.Windows|络~程(W??
By Anthony Jones,Jim Ohlund 清华大学出版C?
下蝲地址Q英文版:http://www.guxiang.com/epubcn/readings/diannaotushu/500/download/1107/network_prog_for_win_2nd.zip

41.Windows2000~程技术内q?
By Mickey Williams 机械工业出版C?
下蝲地址Qftp://ftp.frontfree.net/Pub/Books/C&C++/VC/Windows2000~程技术内q?rar

42.数据仓库
By W.H.Inmon 清华大学出版C?
下蝲地址1Qhttp://tips.9hao.com/vvbksd/20011120/数据仓库.zip
下蝲地址2: ftp://ftp.math.nankai.edu.cn/Ebook/China-pub/chinapub_computerscience_multimedia/ComputerScience/%CA%FD%BE%DD%B2%D6%BF%E2/

43.~码的奥U?
By Charles Petzold 机械工业出版C?
下蝲地址Qftp://ftp.math.nankai.edu.cn/Ebook/China-pub/chinapub_computerscience_multimedia/ComputerScience/%B1%E0%C2%EB%B5%C4%B0%C2%C3%D8/

44.~译原理及实?
By Louden, K.C 机械工业出版C?
下蝲地址Qftp://ftp.math.nankai.edu.cn/Ebook/China-pub/chinapub_computerscience_multimedia/ComputerScience/%B1%E0%D2%EB%D4%AD%C0%ED%BC%B0%CA%B5%BC%F9/

45.Inside C++ Object Model(深度探烦C++对象模型Q?
By Lippman 候捷?
下蝲地址Qhttp://www.jka77.com/book/inside-the-cpp-object-model.pdf

46.C++标准E序?
By Josuttis
下蝲地址1Qhttp://www.codestudy.net/book/download.asp?id=1205&sort=5
下蝲地址2: ftp://ftp.math.nankai.edu.cn/Ebook/C_C++/The Cpp Standard Library.pdf

47.STL源码剖析
By 候捷
下蝲地址Qftp://ftp.math.nankai.edu.cn/Ebook/C_C++/STL源码剖析--侯捷.pdf

48.C++批判(W三? -看看C++的坏话!
By I don't know
下蝲地址Qhttp://www.jka77.com/book/CPPPP.pdf

49.E序设计实践
下蝲地址Qftp://ftp.math.nankai.edu.cn/Ebook/China-pub/chinapub_computerscience_multimedia/%B3%CC%D0%F2%C9%E8%BC%C6%CA%B5%BC%F9/

50.c++沉思录
By Andrew Koenig Barbara Moo 人民邮电出版C?
下蝲地址Qhttp://www.codestudy.net/book/download.asp?id=1261&sort=5

51.C++Builder4技术内q?(q本书俺不知道好不好Q?
By I don't Know
下蝲地址Qhttp://www.codestudy.net/book/download.asp?id=1254&sort=5

52.下面两本书一般大家硬盘里都有的吧Q而且很老了Q但是ؓ了全面,提上来?
(1)Windows 95 E式设计指南 - 候捷
下蝲地址Qhttp://jjhou.csdn.net/win95-a-developers-guide.pdf
(2)Windows 95 pȝE式设计大奥U?- 候捷
下蝲地址Qhttp://jjhou.csdn.net/windows95-system-programming-secrets.pdf

53. 中国大百U全书h?
下蝲地址Qftp://ftp.math.nankai.edu.cn/Ebook/中国大百U全?中国大百U全书h?pdf

54?.0M Bjarne Stroustrup - The C++ Programming Language
http://www.u-n-f.com/books/archive/The%20C++%20Programming%20Language.tar.gz

55?.0M Richard Stevens - TCP-IP Illustrated
http://www.u-n-f.com/books/archive/TCP-IP%20Illustrated.tar.gz

56?.5M Randall Hyde - Art Of Assembly
http://www.u-n-f.com/books/archive/Randall%20Hyde%20-%20Art%20Of%20Assembly.tar.gz

57?.1M M. Abrash - Zen of Graphics Programming
http://www.u-n-f.com/books/archive/M.%20Abrash%20-%20Zen%20of%20Graphics%20Programming.zip

58?49k Kernighan and Ritche - The C Programming Language
http://www.u-n-f.com/books/archive/Kernighan%20and%20Ritchie%20-%20The%20C%20Programming%20Language.zip

59?.3M Bruce Schneier - Applied Cryptography
http://www.u-n-f.com/books/archive/Bruce%20Schneier%20-%20Applied%20Cryptography.zip

60、PHP4_Grundlagen_und_Profiwissen
http://www.u-n-f.com/books/archive/lamp/PHP4_Grundlagen_und_Profiwissen.pdf

61.《C++ Builder高~程技术?
http://www.dingbing.com/book/builder.zip

62.《VC++ 6.0 TLR 模板库参考手册?
http://www.easysea.com/diannao/download/prog/c/mbkc.zip

63.《BORLAND C++ BUILDER 实用培训教程?
http://202.101.232.120/book/openfile.asp?id=223&filename=BC98_CB526.zip

64.《Delphi高开发指南?
http://www.pcbookcn.com/s10899book/program/delphi/Delphi_gjkfzn_for3.rar

65.《新~?Windows API参考大全?
ftp://book:book@down.pcbookcn.com/pro/delphi/新编Windows_API_参考大?rar

66.《Delphi深度历险-附书源码?
http://www.pcbookcn.com/s10899book/program/delphi/Delphi_sdlx_code.rar

67.《Delphi 7高效数据库程序设计?
ftp://book:book@down.pcbookcn.com/pro/delphi/李维的新书《Delphi7高效数据库程序设计?rar

68.《Delphi7开发指南?
ftp://book:book@down.pcbookcn.com/pro/delphi/delphi7开发指?rar

69.《Delphi6集成开发环境?
ftp://book:book@down.pcbookcn.com/pro/delphi/Delphi6集成开发环?rar

70.《Delphi6数据库编E?
ftp://book:book@down.pcbookcn.com/pro/delphi/Delphi6数据库编E?rar

72.《Delphi5.xADO_MTS_COM+高E序设计?
ftp://book:book@down.pcbookcn.com/pro/delphi/Delphi5.xADO_MTS_COM+高E序设计?rar

73.《VISUAL BASIC ~程标准?
http://www.dingbing.com/book/vb.zip

74.《Visual Basic6.0中文版程序员指南?
http://www.easysea.com/diannao/download/prog/vb/zwbc.zip

75.《Visual Basic 6.0 控g参考手册?
http://www.easysea.com/diannao/download/prog/vb/kjck.zip

76.《Visual Basic 6.0中文版语a参考手册?
http://www.easysea.com/diannao/download/prog/vb/zwby.zip

77.《Visual Basic 6.0 开发宝典?
http://www.easysea.com/diannao/download/prog/vb/kfbd.zip

78.《Visual Basic 6.0 实例教程?
http://www.easysea.com/diannao/download/prog/vb/sljc.zip

79.《VB 6.0 中文版实用参考手册?
http://www.easysea.com/diannao/download/prog/vb/syck.zip

80.《Visual Basic 6开发h员指南?
http://www.easysea.com/diannao/download/prog/vb/kfzn.zip

81.《VB ?SQL Server ~程指南Q第五版Q?
http://www.easysea.com/diannao/download/prog/vb/bczn.zip

82.《Jbuilder 5 中文帮助?
http://www.pdown.net/download.asp?downid=2&id=991

83.《JBuilder开发h员指南?
http://youth.dlmu.edu.cn/book/list_down.php?bkid=224

84.《Win32的Internet函数说明?
档案大小Q?245248K
http://www.easysea.com/diannao/download/prog/windows/win32int.zip

85.《Visual InterDev 从入门到_N?
http://www.easysea.com/diannao/download/prog/interdev/crmd.wdl

86.《Visual InterDev 6.0 Web 参考手??
http://www.easysea.com/diannao/download/prog/interdev/jsck.zip

87.《Visual InterDev 6.0 Guide E序员?
http://www.easysea.com/diannao/download/prog/interdev/cxyz.zip

88.《JavaScript E序开发手册?
http://www.cty99.com/Templet/bookdownmore.asp?booktype=script#

89.《JAVA 大全?
http://www.easysea.com/diannao/download/prog/java/cxkf.zip

90.《Visual J++ 6.0 WFC cd参考手册?
http://www.easysea.com/diannao/download/prog/java/lkck.zip

91.《Java联想Q中文)?
http://www.easysea.com/diannao/download/prog/java/lkck.zip

92.《Oracle 8 实用大全?
http://www.easysea.com/diannao/download/prog/oracle/sydq.zip

93.《Microsoft SQL Server 理员手册?
http://www.easysea.com/diannao/download/prog/sql/glys.zip

94.《掌握ACCESS开发?
http://www.easysea.com/diannao/download/prog/sql/glys.zip

95.《Oracle Performance Tuning and Optimization?
http://www.oradb.net/book/oracle_pt.zip

96.《Oracle ProC E序设计?
http://www.oradb.net/book/oracleproc.zip

97.《Oracle8初学者指南?
http://www.easysea.com/diannao/download/prog/oracle/cxzz.zip

98.《RED HAT LINUX 6大全?
http://www.dingbing.com/book/redhatall.zip

99.《RED HAT LINUX 6理工具?
http://www.dingbing.com/book/redhatman.zip

100.《VC++高~程?
http://www.easysea.com/diannao/download/prog/c/vcgj.zip


在寒风中叶落 2006-09-21 20:02 发表评论
]]>
一些琐?/title><link>http://m.shnenglu.com/Backkom-Li/archive/2006/09/07/12117.html</link><dc:creator>在寒风中叶落</dc:creator><author>在寒风中叶落</author><pubDate>Thu, 07 Sep 2006 04:11:00 GMT</pubDate><guid>http://m.shnenglu.com/Backkom-Li/archive/2006/09/07/12117.html</guid><wfw:comment>http://m.shnenglu.com/Backkom-Li/comments/12117.html</wfw:comment><comments>http://m.shnenglu.com/Backkom-Li/archive/2006/09/07/12117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Backkom-Li/comments/commentRss/12117.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Backkom-Li/services/trackbacks/12117.html</trackback:ping><description><![CDATA[ <p> <font size="2">1?define INITIAL_STRUCT(st)  memset(&st, 0, sizeof(st))  /*initial a struct*/<br /><br />2、profiler工具可以用来查程序效率?br /></font> </p> <p> <font size="2">3、文件A<br />      funtion f</font> </p> <p> <font size="2">      文gB<br />      #include "A"<br />      extern f<br />      此处用法错误Q对函数fq行了重定义?/font> </p> <img src ="http://m.shnenglu.com/Backkom-Li/aggbug/12117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Backkom-Li/" target="_blank">在寒风中叶落</a> 2006-09-07 12:11 <a href="http://m.shnenglu.com/Backkom-Li/archive/2006/09/07/12117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个关于结对编E(Pair ProgrammingQ的讲义 [转]http://m.shnenglu.com/Backkom-Li/archive/2006/09/05/12029.html在寒风中叶落在寒风中叶落Tue, 05 Sep 2006 00:38:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/09/05/12029.htmlhttp://m.shnenglu.com/Backkom-Li/comments/12029.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/09/05/12029.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/12029.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/12029.html阅读全文

在寒风中叶落 2006-09-05 08:38 发表评论
]]>
关于代码效率http://m.shnenglu.com/Backkom-Li/archive/2006/08/31/11875.html在寒风中叶落在寒风中叶落Thu, 31 Aug 2006 00:42:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/08/31/11875.htmlhttp://m.shnenglu.com/Backkom-Li/comments/11875.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/08/31/11875.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/11875.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/11875.html有个叫profiler的工P是用来检代码效率的Q现转用法如下,用得着的时候再d它?br />

NetBeans IDE 4.1/5.0 Profiler 教程

本文旨在介绍配合使用 NetBeans Profiler v5.0 ?Profiler Milestone 8 的内宏V如果您使用的是 Milestone 5Q请使用此版?/a>。如果您使用的是 Milestone 6Q请使用此版?/a>?/p>

预计持箋旉Q?0 分钟

NetBeans Profiler 是一个功能强大的工具Q它提供了有兛_用程序运行时行ؓ的重要信息。NetBeans Profiler 产生的开销相对来说较小Q它可以跟踪U程状态、CPU 性能和内存用情c本教程向您介l如何?NetBeans Profiler 来完成以下操作:

先决条g

本教E假定您已经h了一些基本的 Java ~程?NetBeans IDE 使用l验?/p>

教程所需的YӞ

本文使用的表C法

  • <NETBEANS_HOME> - NetBeans IDE 安装目录
  • <USER_HOME> - 用户?home 目录
  • <tutorial_root> - 解压~教E?zip 文g所在的目录
    • 本文使用 <tutorial_root> 来表C压羃此教E的 zip 文g所在的目录。此教程?zip 文g的名UCؓ profilertutorial.zip?
    • 教E?zip 文g解压~到 <tutorial_root> 目录Ӟpȝ会创Z个名?netbeansprofiler 的子目录。例如,?Windows 操作pȝ中,如果已将教程 zip 文g解压~到驱动?E:\ 的根目录中,则系l会创徏 E:\netbeansprofiler 子目录。在 Solaris/Linux 操作pȝ中,如果已将教程 zip 文g解压~到 /home/username 目录中,则系l会创徏 /home/username/netbeansprofiler 子目录?

教程l习

参考资源:



l习 0Q安装ƈ配置教程环境

在开始学习教E之前,请先查以下内容:

  1. 启动 NetBeans IDEQƈ认 IDE 已打开。通过选择“性能分析?gt;“帮助?gt;“关于性能分析?..”,验证安是否装?NetBeans Profiler?br />
    • ?Windows 操作pȝ中,双击 NetBeans IDE 图标
    • ?Solaris/Linux 操作pȝ中,打开l端H口Q然后键?<NETBEANS_HOME>/bin/netbeans
  2. 仅限 NetBeans IDE v4.1Q安装所需的修补程序?
    1. 从“工具”菜单中选择“更C心”,以访?NetBeans 更新中心?
    2. 保选中了“NetBeans 修补E序更新中心”,然后单击“下一步”按钮。徏立连接后Q将昄一个更新列表?
    3. 在“NetBeans 修补E序更新中心”条目下Q选择“NetBeans ProfilerQJ2EE 目 - Tomcat5 支持Q”。该操作q将自动选择 "Tomcat 5 Server" 条目?
    4. 单击“下一步”按钮,q按照说明进行操作以?IDE 可以安装q些修补E序?




l习 1Q监?Swing 应用E序中的U程状态(15 分钟Q?br />

本练习的学习目的Q?/h3>

在本l习中,您将学习如何使用 NetBeans Profiler 监视 J2SE 应用E序中的U程状态。这P您就可以诊断样例应用E序中的性能问题?

背景信息Q?/h3>

Swing 库ؓ J2SE 应用E序提供了图形用L面组件。Swing 库会使用到多个线E,利用 NetBeans Profiler q一功能强大的工P您可以分析出每个U程所p的处理时_从而利用这些分析信息来解决性能问题?

执行步骤Q?/h3>

  1. 选择“文件?gt;“打开目”。找?<tutorial_root>/netbeansprofiler/exercises 文g夏V选择 exercise1 文g夹,然后单击“打开目文g夹”按钮?br />
  2. 在“项目”窗口中Q右键单?exercise1 条目q择“清理ƈ生成目”。然后,再次右键单击 exercise1 条目q择“运行项目”。此Ӟ显CE序的窗口,如下所C?

    查看应用E序的窗? src=

  3. ?"Seconds Before Notification" 讄?30?br />
  4. 单击 "Start!" 按钮。请注意Q该E序无法正确地刷新屏q?br />
  5. 单击 "Exit" 按钮。请注意Q该E序Ҏ不会作出响应?br />
  6. 另一个窗口放在该H口的某一部分上,以遮挡该H口的视图。当Ud另一个窗口时Q您会注意到样例应用E序没有相应地刷新其H口。如下面的示例所C?


  7. 30 U后Q最l将昄一个消息框Q如下所C。单L息框上的 "OK" 按钮?


  8. 应用E序H口再ơ开始响应。单?"Exit" 按钮其关闭?br />
  9. 选择“性能分析?gt;“分析主目”?br />
  10. 如果出现一个对话框Q询问您是否允许修改目生成脚本Q请单击“确定”。如下面的示例所C?


  11. 此时会显C“选择性能分析d”对话框。单d据较大区域的“监视应用程序”按钮?br />
  12. 应选中“启用线E监视”复选框?br />
  13. 单击“运行”按钮。如果显CZ个对话框Q指C您必须先收?Profiler 的校准信息,请单几Z确定”按钮。如下面的示例所C?

    选择“性能分析?gt;“高U命令?gt;“运行性能分析器校准”。完成校准后QProfiler 会显CZ个对话框Q请单击“确定”按钮。如下面的示例所C?

    要进行性能分析Q请q回至上面的W?9 步?

  14. 完成上述步骤后,启动该应用E序Qƈ?IDE 会显C“性能分析器”控刉板,如下所C?


  15. 性能分析器将在其ȝ口中昄U程状态,如下面的CZ所C?


    它用颜色编码来昄U程状态?

    • l色Q线E正在运行或准备q行?
    • 紫色Q线E正在调?Thread.sleep()Q处于休眠状态?
    • 黄色Q线E正在调?Object.wait()Q处于等待状态?
    • U色Q线E在试讉K同步的块或方法时受阻?

  16. 扑ֈ样例 Swing 应用E序的窗口(NetBeans IDE H口可能在其上面Q。单L例应用程序中?"Start!" 按钮Q同时监视标Cؓ AWT-EventQueue-0 的线E所发生的变化。它变为绿色ƈ持箋q种状态整?30 U钟Q如以下样例所C?

    此图形显CZ应用E序没有响应的原因。标Cؓ AWT-EventQueue-0 的线E是 Swing 用来处理H口事g?a >事g分发U程 (Event Dispatch Thread, EDT)。在正常q行?Swing 应用E序中,EDT 的大部分旉处于{待状态而运行的旉却很,因ؓ它只有在分发事g时才会运行很短的一D|间。但是,如果应用E序中的事g处理E序未立卌回,则程序将停止响应Q就像在此示例中一栗?br />

  17. 30 U后Q屏q将昄应用E序的消息框。找到该消息框(NetBeans IDE H口可能在其上面Qƈ单击 "OK" 按钮。然后,单击样例应用E序?"Exit" 按钮Q将其关闭?
  18. “项目”窗口与“性能分析器”控刉板共享同一个空_单击“项目”标{ְ会显C“项目”窗口?br />
  19. 在“项目”窗口中Q双?exercise1 条目以将其展开Q然后展开“源包”和 profilingthreads 条目。右键单?DisplayForm.java 条目q择“打开”?br />
  20. 在包?DisplayForm.java 的编辑器H口中,取消W?132 行至W?157 行的代码块注释。提C:如果未将~辑器配|ؓ昄行号Q请选择“视䏀?gt;“显C号”?
  21. 在包?DisplayForm.java 的编辑器H口中,取消Q或注释掉)W?122 行到W?128 行的代码块注释。下囄出显CZ取消注释的代码块?


  22. 选择“文件?gt;“保存”。您刚才删除了未正确使用 EDT 的代码,q利用了更稳定可靠的解决Ҏ来替代它。现在,应用E序可以及时C出响应?br />
  23. 选择“生成?gt;“生成主目”(或按 F11 键)?br />
  24. 选择“性能分析?gt;“分析主目”?br />
  25. 显C“选择性能分析d”对话框。单d据较大区域的“监视应用程序”按钮?br />
  26. 保选中了“启用线E监视”?br />
  27. 单击“运行”按钮?
  28. 在显C样例程序时Q单?"Start!" 按钮。请注意Q此时的性能分析U程囑ַl发生了变化Q如以下CZ所C?

    EDT 为黄Ԍ应用E序创徏的名?"Our SwingWorker #1" 的线Eؓl色。由?EDT 不是用来执行耗时d的,因此Q按钮和其他E序控g仍保持响应的状态?

  29. 在样例程序中单击 "Exit"?br />
  30. 右键单击 Profiler 囑Ş中的 AWT-EventQueue-0 U程Q然后选择“线E详l信息”。Profiler 会显CZ个饼图,表明了每U状态所q旉Q如以下CZ所C?

    该图形可以帮助您判断E序在每个线E中所p的时间是否恰当。上q示例是代码修复后的CZQ因此,它显CZ EDT 在大部分旉中都处于{待状态的情ŞQ这正好是该U程应具有的行ؓ?br />

  31. 在“项目”窗口中Q右键单?exercise1 条目Q然后选择“关闭项目”?

结Q?/h3>

在本l习中,您学习了如何使用 Profiler 来启动应用程序,以及如何解释 Profiler 的线E信息图形,以此来跟t?Swing 应用E序中的性能问题?

q回首



l习 2Q确定某个方法用的 CPU 旉Q?5 分钟Q?br />

本练习的学习目的Q?/h3>

在本l习中,您将学习如何使用 Profiler 来确定某个应用程序的Ҏ所p的时间?/p>

背景信息Q?/h3>

CPU 的性能问题通常与应用程序的特定功能有关。例如,在报告系l中Q某个报告的q行速度可能比其他报告慢。只分析应用E序中出现性能问题的部分,可以大大减少性能分析器生的开销。在本练习中Q您?NetBeans Profiler 来检?Web 应用E序?CPU 的用情c在l习 3 中,我们仍然使用该样?Web 应用E序来说明如何通过 Profiler 查找内存泄漏?/p>

执行步骤Q?/h3>
  1. 选择“文件?gt;“打开目”。找?<tutorial_root>/netbeansprofiler/exercises 文g夏V选择 exercise2 文g夹,q确保选中“作Z目打开”。单几Z打开目文g夹”按钮?br />
  2. 在“项目”窗口中Q单?exercise2 条目Q然后从菜单中选择“生成?gt;“清理ƈ生成主项目”?
  3. 从菜单中选择“性能分析?gt;“分析主目”。如果出C个对话框Q询问您是否允许修改目生成脚本Q请单击“确定”?
  4. 显C“选择性能分析d”对话框?
  5. 单击“分析性能”按钮?br />
  6. 选择“部分应用程序”单选按钮。然后,单击位于“部分应用程序”单选按钮旁边的“选择”按钮。此时将昄“指定根Ҏ”窗口?br />

    注意Q下面的三个步骤仅适用?Milestone 8?/em>

  7. 在“指定根Ҏ”窗口中Q单几Z从目d...”按钮以d要分析的Ҏ法。将会显C“选择Ҏ”窗口?br />
  8. 在“选择Ҏ”窗口中Q单几Z选择”按钮。Profiler 显C“选择cZ窗口?br />
  9. 在“类名”文本字D中输入 Per。等?IDE 为您昄适用的类列表。选择 Performance cR单几Z打开”按钮以打开其方法列表?

    注意Q下面的两个步骤只适用?Profiler v5.0?/em>

  10. 在“指定根Ҏ”窗口中Q单几Z从目d...”按钮以d要分析的Ҏ法。将会显C“选择Ҏ”窗口?br />
  11. 在“类名”文本字D中Q键?demo.PerformanceQ然后按 Enter 键?

    查看“选择Ҏ”对话框

  12. 在根Ҏ列表中单?processRequest Ҏ以将光中Q然后单几Z确定”按钮。您刚才已将 demo.Performance.processRequest 选中为性能分析的根Ҏ。这意味着Q性能分析器将分析 demo.Performance.processRequest Ҏ和它调用的所有方法,以及q些Ҏ又调用的所有方法,依此cL。性能分析器将?demo.Performance.processRequest 开始,通过分析Ҏ调用囑Ş来确定哪些方法需要分析。它只分析那些需要分析的ҎQ应用程序的其余部分在没有M性能分析开销的情况下l箋以最快的速度q行?br />
  13. 在“指定根Ҏ”窗口中单击“确定”按钮?br />
  14. 在“分析性能”窗口中Q从qo器列表中选择“快速过滤器”,然后单击位于“快速过滤器”条目旁边的 "..." 按钮以指?b>?/b>q行分析的方法。将昄“设|快速过滤器”窗口。验证是否已选中了“排除”单选按钮。然后,在“过滤器值”文本字D中输入 org.apache q单几Z确定”按钮。这P性能分析器将不分析所?org.apache 包(及其子包Q中的方法,即ɘq些Ҏ被选定的根Ҏ调用也是如此。这会减性能分析的开销Qƈqo掉无关的信息?

    “设|快速过滤器”对话框

  15. 在“选择性能分析d”窗口中Q单几Z运行”按钮。如果出C个对话框Q要求您提供校准信息Q请单击“确定”按钮;在性能分析器显C的对话框说明校准已完成后,请单击该对话框的“确定”按钮?
  16. IDE 启?TomcatQƈ?Web 览器窗口中昄 Web 应用E序?index.jsp c同Ӟ在后台q行性能分析器。注意:~省情况下,在成ؓ焦点的浏览器H口中显C?index.jsp ;您可能需要打开另一个浏览器H口Q以便在q行 Web 应用E序时可以阅读这些说明?br />
  17. 因ؓ已选择?demo.Performance.processRequest 作ؓҎ法,所以,您需要用导致该Ҏ法运行的 Web 应用E序部分Q在 Web 览器中Q单几Z性能问题”以转至“性能”演C页。在“性能”演C页上的输入文本字段中输?123456。请不要选中“已优化”选项。单几Z提交查询”按钮,计算于或等?123456 的最大素数?br />
  18. 需要几U钟的时间才能出现响应,q是因ؓ计算最大素数的法存在一些性能问题Q同Ӟ在监?processRequest Ҏ的性能Ӟ性能分析器也会生一些开销?
  19. 当浏览器中显C?"123449" l果后,请单?“获取结果”按? src= 按钮Q或者选择“性能分析?gt;“生成收集结果的快照”。单M?CPU 使用情况快照底部的“组合”标{。性能分析器将昄最新的性能l果Q如下所C?

    查看性能l果? src=

    剙H口昄了从Ҏ法开始的完整Ҏ调用囑Ş。底部窗口是重点描述的部分;它显CZ应用E序中的热点Q即执行旉最长的那些Ҏ?

  20. 要查看ƈ解释q些l果Q请注意 processRequest Ҏdq行的时间ؓ 4308 毫秒 (ms)。然而您会发玎ͼq行 processRequest Ҏ本n的指令只p了很的旉Q?tt>processRequest 的“自用时间”仅?10.1 毫秒。绝大部分时间花在了 processRequest 调用的其他方法上。底部窗口中昄的热Ҏ按“自用时间”进行排序的。通过查看该列表,您可以看?calculate Ҏ占用?97.8% 的执行时间。考虑Cؓ calculate Ҏ分配的工作量Q这׃ؓ奇了?
  21. Z帮助您确定如何优化应用程序,NetBeans Profiler 可以识别代码中无法预料的瓉Q或者识别妨应用程序随意羃攄瓉。单ȝ点列表中?calculate 条目以了解时间究竟花在什么地方,q会更新调用囑ŞH口以显C?calculate。因?calculate Ҏ不调用Q何其他方法,所以请右键单击 calculate 条目Q然后选择“{x代码”以便检查源代码。您会发现它使用了效率很低的法Q所以应该重新设计这U算法?
  22. 选择“性能分析?gt;“重|收集的l果”以清除性能分析器的~冲区。要?calculate 的运行时与优化的法 calculate2 作比较,请在 Web 览器中选中“已优化”选项Q然后单几Z提交查询”。等待显C结果,然后重新选择“性能分析?gt;“生成收集结果的快照”。请注意Q?tt>processRequest Ҏ只运行了 107 毫秒Q?calculate2 Ҏ所q旉q不到执行时间的 10%Q?

    查看性能l果? src=


  23. 注意Q我们将l箋在本l习的基上进行下面的l习Q因此,请不要关闭Q何窗口?br />

结Q?/h3>

在本l习中,您学习了如何使用性能分析器执行方法性能分析?/p>

q回首



l习 3Q分析对象创E以查找内存泄漏Q?0 分钟Q?br />

本练习的学习目的Q?/h3>

作ؓl习 2 的后l练习,我们在本练习中学习如何解释某些性能分析器的囑Ş以监视应用程序创建对象的q程。下面将昄一个内存泄漏示例?

执行步骤Q?/h3>
  1. 本练习是?a >l习 2 的基上进行的Q因此,请务必遵?a >l习 2 中的步骤?br />
  2. 从菜单中选择“性能分析?gt;“分析主目”。如果出C个对话框Q询问您是否要停止当前的性能分析器进E以启动新进E(如下所C)Q请单击“是”按钮l执行?

    “停止ƈ重新启动性能分析器”对话框

    显C“选择性能分析d”对话框?

  3. 在“选择性能分析d”对话框中,单击占据较大区域的“监视应用程序”按钮?
  4. 单击“运行”按钮。IDE 会在左侧显C“性能分析器”控制台。单?查看“遥概览”按? src= 按钮Q或者选择“性能分析?gt;“视䏀?gt;“遥概览”。NetBeans Profiler 在底部的输出窗口中昄三个囑ŞQ如下所C?

    查看监视器图? src=

    在左侧的囑Ş中,U色的阴影部分表C分配的 JVM 堆大。色的覆盖部分表示实际使用的堆I间大小。在上面的示例中Q上ơ更新所分配的堆大小已超q了 20 MB。其中,实际用来保存 Java 对象的堆大小略大?10 MB?/p>

    右侧囑Ş昄?JVM 中的zdU程数?/p>

    中间的图形显CZ两种重要的堆l计信息?

    • 蓝线?JVM 执行垃圾回收的时间占执行旉的百分比Q它是以囑Ş右侧上的 Y 轴ؓ参照l制的。JVM 执行垃圾回收所q旉不能用来q行应用E序。因此,如果蓝线占据较大的百分比Q则需要考虑调整 JVMQ方法是Q配|更大的堆大(请参?-Xmx 参数文档Q,或者{换到不同的垃圑֛?a >法中?br />
    • U线表示存活的生成数Q它是以囑Ş左侧?Y 轴ؓ参照q行l制的。存zȝ成数是指 JVM 堆上所?Java 对象不同生存期的数量Q其中“生存期”被定义为对象存zL的垃圑֛收次数。如果存zȝ成数的D,则表明堆上的大部分对象的存活旉基本相同。但是,如果存活生成数的值随着旉的变化而增长到一个很高的比率Q则表明应用E序正在分配新的对象Q同时保持对已分配的多个旧对象的引用。如果实际上不再需要这些旧对象Q则应用E序正在费Q或“泄漏”)内存?

  5. 性能分析器可以对 CPU 性能或内存用情况进行详l的分析Q但不能同时q行q两U分析。要了解有关?JVM 堆上分配对象以及执行对象的垃圑֛收的详细信息Q请修改性能分析器的讄。单?查看“修Ҏ能分析”按? src= 按钮Q或者选择“性能分析?gt;“修Ҏ能分析”?br />
  6. 单击“分析内存用情况”按钮?br />
  7. 选择“记录对象创建和垃圾回收”单选按钮?br />
  8. 选中“记录分配的栈跟t”复选框?br />
  9. 单击“确定”按钮?br />
  10. 现在Q您已经选择了分析内存用情况,您需要运行应用程序以定它是否有效地使用了内存。单几Z内存泄漏”以转至 MemoryLeak 演示c?
  11. ?MemoryLeak 演示上Q单几Z开始泄漏”?br />
  12. h意存zȝ成数囑Ş中的峰|如以下示例所C。这表明可能出现了内存泄漏?

    存活生成数图形所C的峰倹{? src=

  13. 选择“性能分析?gt;“视䏀?gt;“实时结果”。Profiler 显C?JVM 堆中分配的对象的动态视图。缺省情况下Q它按每个cȝ所有实例用的字节数进行排序。由于怀疑可能出C内存泄漏Q因此,请单几Z生成数”列Q按每个cȝ不同对象生存期数量对昄l果q行排序。下面显CZ得到的显C结果示例?

    先前的生成数囑Ş? src=
    q些列提供了对象分配和内存用情况信息?

    • “分配的对象”是性能分析器正在监视的对象数。在本示例中Q共监视?38 ?float[] 实例。缺省情况下Q该数字Uؓ应用E序实际分配的对象数?10%。通过只监视已创徏对象的一部分Q性能分析器可以显著地减少它在 JVM 中的开销Q这P应用E序几乎可以按最快的速度q行了?br />
    • “活动对象”是仍在 JVM 堆中q因此占用内存的已分配对象数?br />
    • 两个“活动字节”列昄了活动对象所占用的堆内存量。一个列昄囑ŞQ另一个列昄文本?br />
    • “^均生存期”值是使用zd对象计算的。每个对象的生存期是它存zL的垃圑֛收次数。生存期d除以zd对象数得到的l果是q_生存期?br />
    • “生成数”值是使用zd对象计算的。与q_生存期相同,对象生存期是它存zL的垃圑֛收次数。“生成数”值是zd对象的不同生存期数量?br />

  14. 随着E序l箋q行Q性能分析器将更新昄l果。请留意 float[] ?double[] 条目。请注意其生成数值是如何持箋增加的。结果是Q?tt>float[] ?double[] 在列表中持箋上移。最l,它们会显C在列表的顶部,紧靠 java.util.HashMap$EntryQ其生代数g在不断增加)下面。随着应用E序l箋q行Q?tt>java.util.HashMap$Entry?tt>float[] ?double[] 生成数值持l增加,但Q何其他类没有增加。如下面的示例所C?

    后期的生成数囑Ş? src=

  15. 要了解导致生成数值持l增加的原因Q请选择“性能分析?gt;“生成收集结果的快照”。按生成数对昄l果q行排序。右键单?double[] 条目Q然后选择“显C分配栈跟踪”。性能分析器将昄所有分配了一个或多个 double[] 对象的方法。如下面的示例所C?

    double[] 栈跟t? src=
    h意,在分配了 double[] 对象的方法中Q只有一个方法创Zh较大生成数值的 double[] 对象。该Ҏ?run()Q它位于h相应名称 demo.memoryleak.LeakThread 的类中?

  16. 右键单击 run() Ҏ条目Q然后选择“{x代码...”。性能分析器将昄源代码,如下所C?a href="mhtml:file://C:\Documents and Settings\lideqiang\桌面\NetBeans IDE 4_1-5_0 Profiler 教程.mht!http://www.netbeans.org/images/articles/profiler8/leakthread_zh_CN.PNG">引v泄漏的代? src=
    h意,正在分配 double[] ?float[] 对象Qƈ随后其攑֜ HashMap 中。但一直ƈ未删除它们,q意味着Q?tt>HashMap 保留的引用将会妨?JVM 对这些对象进行垃圑֛收。这是非常典型的 Java 内存泄漏Q将对象攑֜ Map 中,然后忘记处理它们了。由于本CZ中用的 MapHashMapQ因此,兌?java.util.HashMap$Entry 对象也出C泄漏?

  17. 选择“性能分析?gt;“停止”来l束性能分析会话Q或者单?“停止”按? src= 按钮?
  18. 在“项目”窗口中Q选择 exercise2 条目Q然后从菜单中选择“文件?gt;“关闭项目”?

结Q?/h3>

在本l习中,您学习了如何使用性能分析器来监视应用E序创徏对象的过E。您q看C性能分析器在应用E序出现内存泄漏时所提供的各U类型的分析指数?/p>



]]>
代码静态分析工具PC-LINT安装配置【{?/title><link>http://m.shnenglu.com/Backkom-Li/archive/2006/08/17/11368.html</link><dc:creator>在寒风中叶落</dc:creator><author>在寒风中叶落</author><pubDate>Thu, 17 Aug 2006 10:56:00 GMT</pubDate><guid>http://m.shnenglu.com/Backkom-Li/archive/2006/08/17/11368.html</guid><wfw:comment>http://m.shnenglu.com/Backkom-Li/comments/11368.html</wfw:comment><comments>http://m.shnenglu.com/Backkom-Li/archive/2006/08/17/11368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Backkom-Li/comments/commentRss/11368.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Backkom-Li/services/trackbacks/11368.html</trackback:ping><description><![CDATA[ <p> <font size="2">         PC-Lint是C/C++软g代码静态分析工P你可以把它看作是一U更加严格的~译器。它不仅可以查出一般的语法错误Q还可以查出那些虽然W合语法要求但不易发现的潜在错误?br /> <br />C语言的灵zL带来了代码效率的提升,但相应带来了代码~写的随意性,另外C~译器不q行强制cd查,也带来了代码~写的隐患。PCLint识别q报告C语言中的~程陷阱和格式缺L发生。它q行E序的全局分析Q能识别没有被适当验的数组下标Q报告未被初始化的变量,警告使用I指针,冗余的代码,{等。Y仉错是软g目开发成本和延误的主要因素。PClint能够帮你在程序动态测试之前发现编码错误。这h除错误的成本更低?br /> 使用PC-Lint在代码走d单元试之前q行查,可以提前发现E序隐藏错误Q提高代码质量,节省试旉。ƈ提供~码规则查,规范软g人员的编码行为?br />׃PC-LINT对于一般程序员来说可能比较陌生Q有好多人安装了也不知道怎样配置和用?br /> <br /> <br />下面我就Ҏ自己的安装和配置心得对PC-Lint的安装、配|及使用q行下详l说?本h主要介绍了将PC-Lint集成到VC++6.0和SourceInsight的方法和步骤?</font> </p> <p> <font size="2">(一)Windows下C/C++开发工具中QVC6使用较ؓ普遍Q因此这里先讲下VC6.0环境中集成pclint的步?<br />首先, <br />当然要下载YӞ正版软g?00?呢,CP所以只好网上找免费的拉。从</font> <a > <font size="2">http://www.61ic.com/down/othe/pclint.rar</font> </a> <font size="2">处可以下载到一?.0版本的pclint.<br />1.pclint.rar解压至c:\, q样lint文g׃与c:\pclint(安装目录)下了?br />2.c:\pclint\lnt 下的3个文件lib-w32.lntQenv-vc6.lntQco-msc60.lnt拯至c:\pclint下, <br />再在安装目录下创建std.lnt和options.lnt两个文gQ其中std.lnt的内容如?br />// contents of std.lnt<br />c:\pclint\co-msc60.lnt<br />c:\pclint\lib-w32.lnt<br />c:\pclint\options.lnt  -si4 -sp4<br />-i"D:\Program Files;D:\Program Files\Microsoft Visual Studio\VC98\Include"<br />//end<br />其中-i后面的\径名为VC的安装\径和VC Include 文g路径Q根据自q修改便可?br />options.lnt 内容可ؓI,为定制内?以后需要时再添加?br />准备工作做完了,下一步就是要pclint集成到VC6中去Q先配置lint使之能对单个C或C++文gq行查?br />1.打开VC6Qtools--->customize-->tools 新徏一个名为pclint的项Q在下面填入<br />command:  C:\pclint\lint-nt.exe<br />arguments:  -u c:\pclint\std.lnt  c:\pclint\env-vc6.lnt  "$(FilePath)"<br />Use Output Window  打上?br />close 完成?q个在你VCH口tools菜单下应该多了一个pclint选项Q可以用它来q行lintE序Q对你的c/c++代码q行静态检查了?br />现在可以用个小E序试一下pclint?/font> </p> <p> <font size="2">//test1.cpp#include <string.h><br />class X<br />{<br /> int *p;<br />public:<br /> X()<br /> { p = new int[20]; }<br /> void init()<br /> { memset( p, 20, 'a'  ); }<br /> ~X()<br /> { delete p; }<br />};<br />~译q个文gQ看下你的编译器l你多少警告Q再q行下lintQ?可以自己Ҏ一下?br />我的机器上,VC产生0 errors 0 warnings, 而lintE序产生了如?条警告信?有些q是很有用处的提C,q里׃一一分析?<br />test.cpp(12): error 783: (Info -- Line does not end with new-line)<br />test.cpp(7): error 1732: (Info -- new in constructor for class 'X' which has no <br />assignment operator)<br />test.cpp(7): error 1733: (Info -- new in constructor for class 'X' which has no <br />copy constructor)<br />    { memset( p, 20, 'a'  ); }<br />test.cpp(9): error 669: (Warning -- Possible data overrun for function <br />'memset(void *, int, unsigned int)', argument 3 (size=97) exceeds argument 1 <br />(size=80) [Reference: test.cpp: lines 7, 9])<br />test.cpp(7): error 831: (Info -- Reference cited in prior message)<br />test.cpp(9): error 831: (Info -- Reference cited in prior message)<br />    { delete p; }<br />test.cpp(11): error 424: (Warning -- Inappropriate deallocation (delete) for <br />'new[]' data)</font> </p> <p> <font size="2"> --- Wrap-up for Module: test.cpp<br />test.cpp(2): error 753: (Info -- local class 'X' (line 2, file test.cpp) not <br />referenced)<br />Tool returned code: 8</font> </p> <p> <font size="2">2.通常一个VC目中包含多个C或C++文gQ有旉要同时对q一pd的文件进行lint查,我们可以通过配置一个pclint_project来达到目的?br />和前面第一步中的方法基本一P不过q里我们需要用到unix中的find{命令来查找当前目录下的C和C++文gQ然后再它们送给lintE序处理Q所以得先从</font> <a > <font size="2">http://www.weihenstephan.de/~syring/win32/UnxUtils.zip</font> </a> <font size="2">下蝲UnxUtils.zip.<br />接着按下列步骤进行:<br />(i)解压UnxUtils.zip至c:\unix? 可以看到C:\unix\usr\local\wbin有很多unix下的命o,{下会用?br />(ii)打开VC6Qtools--->customize-->tools <br />新徏一个名为pclint_project的项Q只不过下面的commands和arguments内容不同?br />commands: C:\unix\usr\local\wbin\find.exe<br />arguments: $(FileDir) -name *.c  -o -name *.cpp | C:\unix\usr\local\wbin\xargs <br />lint-nt            -i"c:\unix\usr\local"  -u c:\pclint\std.lnt  <br />c:\pclint\env-vc6.lnt <br />(iii)Use Output Window打上勾,close退出。好了,q时VC <br />tools菜单下应该又多了一个pclint_project了Q你以后可以用它来对一个VC目q行lint查程序了.</font> </p> <p> <font size="2">(?SourceInsight中集成pclintE序的方?<br />Windowsq_下也有好多h都喜Ƣ用SourceInsight~辑C/C++E序Q如果将pclint集成到SourceInsight中,那就相当于给SourceInsight增加了一个C/C++~译?而且它的查更严格Q能发现一些编译器发现不了的问题,可以大大减少E序中潜伏的BUG。这L话,怿更多Z喜欢SourceInsightq个工具了?br />下面要地介绍下pclint集成到SourceInsight中的Ҏ <br />有了上面VC中集成pclint的经? 下面的事情就应该比较L了,<br />(a)打开你的SourceInsight, 选择Options-->Custom Commands-->Add, 输入pclint(当然名字可以随便).<br />(b) Run中输? c:\pclint\lint-nt  -u  c:\pclint\std.lnt  c:\pclint\env-vc6.lnt %f<br />(c)Dir留空Q将Iconic Window, Capture Output, Parse Links in OutPut, File,then Line <br />四项前打上勾?br />(d)然后点右?Menu--->Menu-->View--><end of menu>, 右侧Insert, OK.<br />(e)此时在SourceInsight中的View菜单下多了个pclint选项Q可以用它来对单个C/C++文gq行静态检查?/font> </p> <p> <font size="2">用类似的Ҏ可以配置对一个SourceInsight工程文g的lint查?br />(a)打开你的SourceInsight, 选择Options-->Custom Commands-->Add, <br />输入pclint_project(当然名字可以随便).<br />(b) Run中输? C:\unix\usr\local\wbin\find.exe %d -name *.c  -o -name *.cpp  | <br />C:\unix\usr\local\wbin\xargs lint-nt <br />-i"C:\unix\usr\local" -u c:\pclint\std.lnt  c:\pclint\env-vc6.lnt<br />(c)Dir留空Q将Iconic Window, Capture Output, Parse Links in OutPut, File,then Line <br />四项前打上勾?br />(d)然后点右?Menu--->Menu-->View--><end of menu>, 右侧Insert, OK.<br />(e)此时在SourceInsight中的View菜单下多了个pclint_project选项Q可以用它来一个工E中的C/C++文gq行静态检查?/font> </p> <p> <font size="2">本文主要对pclint集成到VC及SourceInsight环境中的ҎҎ本h安装和用心得做了较详细介绍Q希望对以前没用过pclint的朋友们能有所帮助Q不之处还请多指正Q?br /></font> </p> <img src ="http://m.shnenglu.com/Backkom-Li/aggbug/11368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Backkom-Li/" target="_blank">在寒风中叶落</a> 2006-08-17 18:56 <a href="http://m.shnenglu.com/Backkom-Li/archive/2006/08/17/11368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文g操作http://m.shnenglu.com/Backkom-Li/archive/2006/08/10/11076.html在寒风中叶落在寒风中叶落Thu, 10 Aug 2006 00:55:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/08/10/11076.htmlhttp://m.shnenglu.com/Backkom-Li/comments/11076.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/08/10/11076.html#Feedback2http://m.shnenglu.com/Backkom-Li/comments/commentRss/11076.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/11076.html  1 #include 
 2 main() 
 3
 4 FILE  * fp; 
 5 char  ch; 
 6 if ((fp = fopen( " c1.txt " , " rt " )) == NULL) 
 7
 8 printf( " \nCannot open file strike any key exit! " ); 
 9 exit( 1 ); 
10 }
 
11 ch = fgetc(fp); 
12 while (ch != EOF) 
13
14 putchar(ch); 
15 ch = fgetc(fp); 
16 }
 
17 fclose(fp); 
18 }
                                                   
 1 #include 
 2 main( int  argc, char   * argv[]) 
 3
 4 FILE  * fp1, * fp2; 
 5 char  ch; 
 6 if (argc == 1
 7
 8 printf( " have not enter file name strike any key exit " ); 
 9 getch();        // 用于{待输入文g?/span>
10 exit( 0 ); 
11 }
 
12 if ((fp1 = fopen(argv[ 1 ], " rt " )) == NULL) 
13
14 printf( " Cannot open %s\n " ,argv[ 1 ]); 
15 getch(); 
16 exit( 1 ); 
17 }

18 if (argc == 2 ) fp2 = stdout; 
19 else   if ((fp2 = fopen(argv[ 2 ], " wt+ " )) == NULL) 
20
21 printf( " Cannot open %s\n " ,argv[ 1 ]); 
22 getch(); 
23 exit( 1 ); 
24 }
 
25 while ((ch = fgetc(fp1)) != EOF) 
26 fputc(ch,fp2); 
27 fclose(fp1); 
28 fclose(fp2); 
29 }
 
30
?/span>
•用文件的方式共有12U,下面l出了它们的W号和意义?
•w    代表写操?
•r     代表阅读
•b    代表二进制数
•a    代表d操作Q文件不U在则徏?
?    代表扩展
 
“rt”?L开一个文本文Ӟ只允许读数据
“wt?只写打开或徏立一个文本文Ӟ只允许写数据
“at?q加打开一个文本文Ӟq在文g末尾写数?
“rb?只读打开一个二q制文gQ只允许L?
“wb?只写打开或徏立一个二q制文gQ只允许写数?
“ab”追加打开一个二q制文gQƈ在文件末ֆ数据
“rt+?d打开一个文本文Ӟ允许d?
 
“wt+?d打开或徏立一个文本文Ӟ允许d
  “at+?d打开一个文本文Ӟ允许读,或在文g末追加数?
“rb+?d打开一个二q制文gQ允许读和写
“wb+”读写打开或徏立一个二q制文gQ允许读和写
“ab+?d打开一个二q制文gQ允许读Q或在文件末q加数据
 
•fopen()   
•fclose()
•putc()
•fputc()
•getc()
•fgetc()
•fseek()
•fprintf
 
•fscanf()
•feof()
•ferror()
•rewind()
•remove()
•fflush()




]]>
Debug工具?/title><link>http://m.shnenglu.com/Backkom-Li/archive/2006/08/03/10810.html</link><dc:creator>在寒风中叶落</dc:creator><author>在寒风中叶落</author><pubDate>Thu, 03 Aug 2006 04:29:00 GMT</pubDate><guid>http://m.shnenglu.com/Backkom-Li/archive/2006/08/03/10810.html</guid><wfw:comment>http://m.shnenglu.com/Backkom-Li/comments/10810.html</wfw:comment><comments>http://m.shnenglu.com/Backkom-Li/archive/2006/08/03/10810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Backkom-Li/comments/commentRss/10810.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Backkom-Li/services/trackbacks/10810.html</trackback:ping><description><![CDATA[ <p align="center"> <img height="616" alt="637.jpg" src="http://m.shnenglu.com/images/cppblog_com/backkom-li/|络日志囄/637.jpg" width="530" border="0" /> </p> <img src ="http://m.shnenglu.com/Backkom-Li/aggbug/10810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Backkom-Li/" target="_blank">在寒风中叶落</a> 2006-08-03 12:29 <a href="http://m.shnenglu.com/Backkom-Li/archive/2006/08/03/10810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中string和string.h的作用和区别【{帖?/title><link>http://m.shnenglu.com/Backkom-Li/archive/2006/07/27/10580.html</link><dc:creator>在寒风中叶落</dc:creator><author>在寒风中叶落</author><pubDate>Thu, 27 Jul 2006 04:28:00 GMT</pubDate><guid>http://m.shnenglu.com/Backkom-Li/archive/2006/07/27/10580.html</guid><wfw:comment>http://m.shnenglu.com/Backkom-Li/comments/10580.html</wfw:comment><comments>http://m.shnenglu.com/Backkom-Li/archive/2006/07/27/10580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Backkom-Li/comments/commentRss/10580.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Backkom-Li/services/trackbacks/10580.html</trackback:ping><description><![CDATA[ <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font size="2"> <img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">#include  </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">string</span> <span style="COLOR: #000000">.h</span> <span style="COLOR: #000000">></span> </font> <font size="2"> <span style="COLOR: #000000">  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #0000ff">void</span> </font> <font size="2"> <span style="COLOR: #000000">  main()  <br /><img id="Codehighlighter1_40_208_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_208_Open_Text.style.display='none'; Codehighlighter1_40_208_Closed_Image.style.display='inline'; Codehighlighter1_40_208_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_40_208_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_208_Closed_Text.style.display='none'; Codehighlighter1_40_208_Open_Image.style.display='inline'; Codehighlighter1_40_208_Open_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span> <span id="Codehighlighter1_40_208_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://m.shnenglu.com/images/dot.gif" /> </span> </font> <span id="Codehighlighter1_40_208_Open_Text"> <font size="2"> <span style="COLOR: #000000">{  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />       </span> <span style="COLOR: #0000ff">string</span> <span style="COLOR: #000000">  aaa</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">  </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">abcsd  d</span> <span style="COLOR: #000000">"</span> </font> <font size="2"> <span style="COLOR: #000000">;  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />       printf(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">looking  for  abc  from  abcdecd  %s\n</span> <span style="COLOR: #000000">"</span> </font> <font size="2"> <span style="COLOR: #000000">,  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />               (strcmp(aaa,</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">abc</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">))  </span> <span style="COLOR: #000000">?</span> <span style="COLOR: #000000">  </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">Found</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">  :  </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">Not  Found</span> <span style="COLOR: #000000">"</span> </font> <font size="2"> <span style="COLOR: #000000">);  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </font> </span> <font size="2"> <span style="COLOR: #000000">  </span> </font> </div> <br /> <font size="2">不能正确执行Q提C是stringcd没有定义   </font> <p> <font size="2">而下面:  <br /></font> </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"> <font size="2"> <img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">#include  </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">string</span> <span style="COLOR: #000000">></span> </font> <font size="2"> <span style="COLOR: #000000">  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> <font style="BACKGROUND-COLOR: #ff1493"> <font color="#000000"> <span style="COLOR: #0000ff">using</span> <span style="COLOR: #000000">  </span> <span style="COLOR: #0000ff">namespace</span> </font> </font> </font> <font size="2"> <span style="COLOR: #000000"> <font style="BACKGROUND-COLOR: #ff1493" color="#000000">  std;</font>  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #0000ff">void</span> </font> <font size="2"> <span style="COLOR: #000000">  main()  <br /><img id="Codehighlighter1_63_229_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_229_Open_Text.style.display='none'; Codehighlighter1_63_229_Closed_Image.style.display='inline'; Codehighlighter1_63_229_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_63_229_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_63_229_Closed_Text.style.display='none'; Codehighlighter1_63_229_Open_Image.style.display='inline'; Codehighlighter1_63_229_Open_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span> <span id="Codehighlighter1_63_229_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://m.shnenglu.com/images/dot.gif" /> </span> </font> <span id="Codehighlighter1_63_229_Open_Text"> <font size="2"> <span style="COLOR: #000000">{  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />       </span> <span style="COLOR: #0000ff">string</span> <span style="COLOR: #000000">  aaa</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">  </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">abcsd  d</span> <span style="COLOR: #000000">"</span> </font> <font size="2"> <span style="COLOR: #000000">;  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />       printf(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">looking  for  abc  from  abcdecd  %s\n</span> <span style="COLOR: #000000">"</span> </font> <font size="2"> <span style="COLOR: #000000">,  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />               (strcmp(aaa,</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">abc</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">))  </span> <span style="COLOR: #000000">?</span> <span style="COLOR: #000000">  </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">Found</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">  :  </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">Not  Found</span> <span style="COLOR: #000000">"</span> </font> <font size="2"> <span style="COLOR: #000000">);  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </font> </span> <font size="2"> <span style="COLOR: #000000">  </span> </font> </div> <p> <br /> <font size="2">q里的string~译器就认识了,但是strcmp׃认识了呢Q ?br /></font> </p> <p> <font size="2">一般一个C++的老的带?h”扩展名的库文gQ比如iostream.hQ在新标准后的标准库中都有一个不带?h”扩展名的相对应Q区别除了后者的好多改进之外Q还有一点就是后者的东东都塞q了“std”名字空间中? <br /> <br /></font> <font size="2"> <font color="#ff1493">但唯独string特别? <br /></font>问题在于C++要兼容C的标准库Q而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文Ӟ包含一些常用的C字符串处理函敎ͼ比如g提到的strcmp? <br />q个头文件跟C++的stringcd点关pM没有Q所?lt;string>q<string.h>的“升U版本”,他们是毫无关pȝ两个头文件? <br />要达到楼ȝ目的Q比如同Ӟ  <br /></font> </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"> <font size="2"> <img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">#include  </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">string</span> <span style="COLOR: #000000">.h</span> <span style="COLOR: #000000">></span> </font> <font size="2"> <span style="COLOR: #000000">  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include  </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">string</span> <span style="COLOR: #000000">></span> </font> <font size="2"> <span style="COLOR: #000000">  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #0000ff">using</span> <span style="COLOR: #000000">  </span> <span style="COLOR: #0000ff">namespace</span> <span style="COLOR: #000000">  std;  </span> </font> </div> <p> <br /> <font size="2">或者 ?br /></font> </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"> <font size="2"> <img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">#include  </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">cstring</span> <span style="COLOR: #000000">></span> </font> <font size="2"> <span style="COLOR: #000000">  <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include  </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">string</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000">  </span> </font> </div> <p> <br /> <font size="2"> <br />其中<cstring>是与C标准库的<string.h>相对应,但裹有std名字I间的版本?/font> </p> <p> <font size="2">W谈Q来自高质量++Q?</font> </p> <p> <font size="2">C++标准库很大。非常大。难以置信的大。怎么个大法?q么说吧Q在C++标准中,关于标准库的规格说明占了密密麻麻300 多页Q这q不包括标准C 库,后者只?作ؓ参?Q老实_原文是用的q个词)包含在C++库中。当ӞqL大好Q但在现在的情况下,实大好Q因为大的库会包含大量的功能。标准库中的功能多Q开发自q应用E序时能借助的功能就多。C++库ƈ非提供了一切(很明昄是,没有提供q发和图形用h口的支持Q,但确实提供了很多。几乎Q何事你都可以求助于它。在归纳标准库中有些什么之前,需要介l一下它是如何组l的。因为标准库中东西如此之多,你(或象你一L其他什么hQ所选择的类名或函数名就很有可能和标准库中的某个名字相同。ؓ了避免这U情冉|造成的名字冲H,实际上标准库中的一切都被放在名字空间std 中(参见条款28Q。但q带来了一个新问题。无数现有的C++代码都依赖于使用了多q的伪标准库中的功能Q例如,声明?lt;iostream.h>Q?lt;complex.h>Q?lt;limits.h>{头文g中的功能。现有Y件没有针对用名字空间而进行设计,如果用std 来包装标准库D现有代码不能用,是一U可耻行为。(q种釜底抽薪的做法会让现有代码的E序员说出比"可? 更难听的话)慑于被激怒的E序员会产生的破坏力Q标准委员会军_为包装了std 的那部分标准库构件创建新的头文g名。生成新头文件的Ҏ仅仅是将现有C++头文件名中的.h LQ方法本w不重要Q正如最后生的l果不一致也q不重要一栗所?lt;iostream.h>变成?lt;iostream>Q?lt;complex.h>变成?lt;complex>Q等{。对于C 头文Ӟ采用同样的方法,但在每个名字前还要添加一个c。所以C ?lt;string.h>变成?lt;cstring>Q?lt;stdio.h>变成?lt;cstdio>Q等{。最后一ҎQ旧的C++头文件是官方所反对使用的(卻I明确列出不再支持Q,但旧的C 头文件则没有Q以保持对C 的兼Ҏ)。实际上Q编译器刉商不会停止对客L有Y件提供支持,所以可以预计,旧的C++头文件在未来几年内还是会被支持?br />所以,实际来说Q下面是C++头文件的现状Q?br /></font> <font color="#ff1493"> <font size="2">旧的C++头文件名?lt;iostream.h>会l箋被支持,管它们不在官方标准中。这些头文g的内容不在名字空间std 中?br />新的C++头文件如<iostream>包含的基本功能和对应的旧头文件相同,但头文g的内容在名字I间std 中。(在标准化的过E中Q库中有些部分的l节被修改了Q所以旧头文件和新头文g中的实体不一定完全对应。)<br />标准C 头文件如<stdio.h>l箋被支持。头文g的内容不在std 中?br />hC 库功能的新C++头文件具有如<cstdio>q样的名字。它们提供的内容和相应的旧C 头文件相同,只是内容在std 中?br />所有这些初看有Ҏ,但不难习惯它。最大的挑战是把字符串头文g理清楚:<br /></font> <font size="2"> <font style="BACKGROUND-COLOR: #ee82ee" color="#800080"><string.h>是旧的C 头文Ӟ对应的是Zchar*的字W串处理函数Q?br /><cstring>是对应于旧C 头文件的std 版本Q?br /><string>是包装了std 的C++头文Ӟ对应的是新的string cR?/font> <br /> </font> </font> <font size="2">如果能掌握这些(我相信你能)Q其余的也就Ҏ了?br /></font> </p> <img src ="http://m.shnenglu.com/Backkom-Li/aggbug/10580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Backkom-Li/" target="_blank">在寒风中叶落</a> 2006-07-27 12:28 <a href="http://m.shnenglu.com/Backkom-Li/archive/2006/07/27/10580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针函数和函数指?/title><link>http://m.shnenglu.com/Backkom-Li/archive/2006/07/23/10364.html</link><dc:creator>在寒风中叶落</dc:creator><author>在寒风中叶落</author><pubDate>Sun, 23 Jul 2006 05:52:00 GMT</pubDate><guid>http://m.shnenglu.com/Backkom-Li/archive/2006/07/23/10364.html</guid><wfw:comment>http://m.shnenglu.com/Backkom-Li/comments/10364.html</wfw:comment><comments>http://m.shnenglu.com/Backkom-Li/archive/2006/07/23/10364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Backkom-Li/comments/commentRss/10364.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Backkom-Li/services/trackbacks/10364.html</trackback:ping><description><![CDATA[ <font size="2"> <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://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">#include <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_31_50_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_50_Open_Text.style.display='none'; Codehighlighter1_31_50_Closed_Image.style.display='inline'; Codehighlighter1_31_50_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_31_50_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_50_Closed_Text.style.display='none'; Codehighlighter1_31_50_Open_Image.style.display='inline'; Codehighlighter1_31_50_Open_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> max(</span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> x,</span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> y)</span> <span id="Codehighlighter1_31_50_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://m.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_31_50_Open_Text"> <span style="COLOR: #000000">{ </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000">(x</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000">y</span> <span style="COLOR: #000000">?</span> <span style="COLOR: #000000">x:y); }</span> </span> <span style="COLOR: #000000"> <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000"> main() <br /><img id="Codehighlighter1_67_205_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_205_Open_Text.style.display='none'; Codehighlighter1_67_205_Closed_Image.style.display='inline'; Codehighlighter1_67_205_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_67_205_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_205_Closed_Text.style.display='none'; Codehighlighter1_67_205_Open_Image.style.display='inline'; Codehighlighter1_67_205_Open_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span> <span id="Codehighlighter1_67_205_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://m.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_67_205_Open_Text"> <span style="COLOR: #000000">{ <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> (</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">ptr)(); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> a,b,c; <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    ptr</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">max; <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    scanf(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">%d,%d</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">&</span> <span style="COLOR: #000000">a,</span> <span style="COLOR: #000000">&</span> <span style="COLOR: #000000">b); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    c</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">(</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">ptr)(a,b); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    printf(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">a=%d,b=%d,max=%d</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">,a,b,c); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000"> <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> </div>指针函数和函数指针有什么区?<br /><br />1,q两个概念都是简Uͼ指针函数是指带指针的函数Q即本质是一个函数。我们知道函数都又返回类型(如果不返回|则ؓ无值型Q,只不q指针函数返回类型是某一cd的指针。其定义格式如下所C: <br /><br />q回cd标识W?*q回名称QŞ式参数表Q?<br />{ 函数?} <br /><br />q回cd可以是Q何基本类型和复合cd。返回指针的函数的用途十分广泛。事实上Q每一个函敎ͼ即它不带有q回某种cd的指针,它本w都有一个入口地址Q该地址相当于一个指针。比如函数返回一个整型|实际上也相当于返回一个指针变量的|不过q时的变量是函数本n而已Q而整个函数相当于一个“变量”。例如下面一个返回指针函数的例子Q?<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />#include <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">find(); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />main() <br /><img id="Codehighlighter1_36_334_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_334_Open_Text.style.display='none'; Codehighlighter1_36_334_Closed_Image.style.display='inline'; Codehighlighter1_36_334_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_36_334_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_36_334_Closed_Text.style.display='none'; Codehighlighter1_36_334_Open_Image.style.display='inline'; Codehighlighter1_36_334_Open_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_36_334_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://m.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_36_334_Open_Text"><span style="COLOR: #000000">{ <br /><img id="Codehighlighter1_67_109_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_109_Open_Text.style.display='none'; Codehighlighter1_67_109_Closed_Image.style.display='inline'; Codehighlighter1_67_109_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_67_109_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_109_Closed_Text.style.display='none'; Codehighlighter1_67_109_Open_Image.style.display='inline'; Codehighlighter1_67_109_Open_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000"> score[][</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span id="Codehighlighter1_67_109_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://m.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_67_109_Open_Text"><span style="COLOR: #000000">{</span><span id="Codehighlighter1_68_80_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://m.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_68_80_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">70</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">80</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">90</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,</span><span id="Codehighlighter1_82_94_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://m.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_82_94_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">56</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">89</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">34</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">45</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,</span><span id="Codehighlighter1_96_108_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://m.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_96_108_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">34</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">23</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">56</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">45</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">; <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p; <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i,m; <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Enter the number to be found:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">m); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">the score of NO.%d are:\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,m); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">find(score,m); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />        printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%5.2f\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i)); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_375_384_Open_Image" onclick="this.style.display='none'; Codehighlighter1_375_384_Open_Text.style.display='none'; Codehighlighter1_375_384_Closed_Image.style.display='inline'; Codehighlighter1_375_384_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_375_384_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_375_384_Closed_Text.style.display='none'; Codehighlighter1_375_384_Open_Image.style.display='inline'; Codehighlighter1_375_384_Open_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">find(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pionter)[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">],</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n)</span><span id="Codehighlighter1_375_384_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_375_384_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">定义指针函数</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"> <br /><img id="Codehighlighter1_387_445_Open_Image" onclick="this.style.display='none'; Codehighlighter1_387_445_Open_Text.style.display='none'; Codehighlighter1_387_445_Closed_Image.style.display='inline'; Codehighlighter1_387_445_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_387_445_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_387_445_Closed_Text.style.display='none'; Codehighlighter1_387_445_Open_Image.style.display='inline'; Codehighlighter1_387_445_Open_Text.style.display='inline';" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_387_445_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://m.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_387_445_Open_Text"><span style="COLOR: #000000">{ <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pt; <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    pt</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(pionter</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">n); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">(pt); <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> <br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br />学生学号?LP函数find()被定义ؓ指针函数Qv形参pointer是指针指向包?个元素的一l数l的指针变量。pointer+1指向score的第一行?(pointer+1)指向W一行的W?个元素。pt是一个指针变量,它指向Q点型变量。main()函数中调用find()函数Q将score数组的首地址传给pointer. <br /><br />2,“函数指针”是指向函数的指针变量,因而“函数指针”本w首先应是指针变量,只不q该指针变量指向函数。这正如用指针变量可指向整型变量、字W型、数l一Pq里是指向函数。如前所qͼC在编译时Q每一个函数都有一个入口地址Q该入口地址是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函敎ͼ如同用指针变量可引用其他类型变量一P在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针不能绝对不能指向不同类型,或者是带不同Ş参的函数Q在定义函数指针的时候我们很Ҏ犯如下的错误?/font> <p> <font size="2">int *fp(int a);//q里是错误的Q因为按照结合性和优先U来看就是先?)l合Q然后变成了一个返回整形指针的函数了,而不是函数指针,q一点尤光要注意! </font> </p> <font size="2">函数指针的说明方法ؓ: <br />数据cd标志W?Q?指针变量名)Q参敎ͼQ注Q函数括号中的参数可有可无,视情况而定?<br />下面的程序说明了函数指针调用函数的方法: <br /><br /><br />ptr是指向函数的指针变量Q所以可把函数max()赋给ptr作ؓptr的|xmax()的入口地址赋给ptr,以后可以用ptr来调用该函数Q实际上ptr和max都指向同一个入口地址Q不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向Q何函敎ͼq你像怎么做了。在E序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它Q因此可以先后指向不同的函数Q不q注意,指向函数的指针变量没?+?-q算Q用时要心?<br /></font> <img src ="http://m.shnenglu.com/Backkom-Li/aggbug/10364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Backkom-Li/" target="_blank">在寒风中叶落</a> 2006-07-23 13:52 <a href="http://m.shnenglu.com/Backkom-Li/archive/2006/07/23/10364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>良好的态度http://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10334.html在寒风中叶落在寒风中叶落Fri, 21 Jul 2006 11:42:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10334.htmlhttp://m.shnenglu.com/Backkom-Li/comments/10334.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10334.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/10334.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/10334.html 如果英文字母A到Z分别~上1?6的分敎ͼQA=1QB=2Q?..Z=26Q那?
知识Qknowledge)得到96分(11+14+15+23+12+5+4+7+5=96Q,
努力QhardworkQ也只得98分(8+1+18+4+23+15+18+11=98Q,
态度(attitude) Q?Q?/font>


]]>
String & stringhttp://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10326.html在寒风中叶落在寒风中叶落Fri, 21 Jul 2006 11:38:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10326.htmlhttp://m.shnenglu.com/Backkom-Li/comments/10326.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10326.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/10326.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/10326.html在BCB?br />#include"CString.h"

string s="";//Ansistring
String s="";//string两者是不同?/p>

]]>
union的迷?/title><link>http://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10303.html</link><dc:creator>在寒风中叶落</dc:creator><author>在寒风中叶落</author><pubDate>Fri, 21 Jul 2006 04:56:00 GMT</pubDate><guid>http://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10303.html</guid><wfw:comment>http://m.shnenglu.com/Backkom-Li/comments/10303.html</wfw:comment><comments>http://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Backkom-Li/comments/commentRss/10303.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Backkom-Li/services/trackbacks/10303.html</trackback:ping><description><![CDATA[ <p> <font size="2">联合(union)在c/c++里面见得q不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现Q那么究竟什么是联合、怎么ȝ、有什么需要注意的地方呢?<br /><br />1、什么是联合Q?br />   “联合”是一U特D的c,也是一U构造类型的数据l构?在一个“联合”内可以定义多种不同的数据类型, 一个被说明“联合”类型的变量中,允许装入该“联合”所定义的Q何一U数据,q些数据׃n同一D内存,已达到节省空间的目的Q还有一个节省空间的cdQ位域)?q是一个非常特D的地方Q也是联合的特征。另外,同struct一P联合默认讉K权限也是公有的,q且Q也h成员函数?br /><br />2、联合与l构的区别?<br />   “联合”与“结构”有一些相g处。但两者有本质上的不同。在l构中各成员有各自的内存I间Q?一个结构变量的总长度是各成员长度之和(I结构除外,同时不考虑边界调整Q。而在“联合”中Q各成员׃n一D内存空_ 一个联合变量的长度{于各成员中最长的长度。应该说明的是, q里所谓的׃n不是指把多个成员同时装入一个联合变量内Q?而是指该联合变量可被赋予M成员|但每ơ只能赋一U| 赋入新值则冲去旧倹{?br /><br />3、如何定义?<br />   例如Q?br />    union test<br />    <<br />      test() < ><br />      int office;<br />      char teacher[5];<br />    >; <br />    定义了一个名为test的联合类型,它含有两个成员,一个ؓ整型Q成员名为officeQ另一个ؓ字符数组Q数l名为teacher。联合定义之后,卛_q行联合变量说明Q被说明为testcd的变量,可以存放整型量office或存攑֭W数lteacher?br /><br />4、如何说明?<br />   联合变量的说明有三种形式Q先定义再说明、定义同时说明和直接说明?br />   以testcdZQ说明如下:<br />    1) union test<br />       <<br />         int office;<br />         char teacher[5];<br />       >; <br />       union test a,b;    /*说明a,b为testcd*/<br />    2) union test<br />       <<br />         int office;<br />         char teacher[5];<br />       > a,b;<br />    3) union <br />       <<br />         int office;<br />         char teacher[5];<br />       > a,b; <br />       l说明后的a,b变量均ؓtestcd?br />    a,b变量的长度应{于test的成员中最长的长度Q即{于teacher数组的长度,?个字节。a,b变量如赋予整型值时Q只使用?个字节,而赋予字W数l时Q可?个字节?br /><br />5、如何用?<br />   对联合变量的赋|使用都只能是对变量的成员q行?br />   联合变量的成员表CZؓQ联合变量名.成员名  <br />   例如Qa被说明ؓtestcd的变量之后,可用a.class、a.office  <br />   不允许只用联合变量名作赋值或其它操作Q也不允许对联合变量作初始化赋|赋值只能在E序中进行?br />   q要再强调说明的是,一个联合变量,每次只能赋予一个成员倹{换句话_一个联合变量的值就是联合变员的某一个成员倹{?br /><br />6、匿名联?br />   匿名联合仅仅通知~译器它的成员变量共同n一个地址,而变量本w是直接引用?不用通常的点可符语法.例如Q?br />     #include <iostream><br />     void main()<br />     <<br />         union<  <br />                int test;<br />                char c;  <br />               >;          <br />        test=5;<br />        c=a;<br />        std::cout<<i<<" "<<c;<br />     ><br />    正如所见到?联合成分象声明的普通局部变量那栯引用,事实上对于程序而言,q也正是使用q些变量的方?另外,管被定义在一个联合声明中,他们与同一个程序快那的M其他局部变量具有相同的作用域?q意呌匿名联合内的成员的名UC能与同一个作用域内的其他一直标志符冲突.<br />    对匿名联合还存在如下限制:<br />    因ؓ匿名联合不用点q算W,所以包含在匿名联合内的元素必须是数?不允许有成员函数Q也不能包含U有或受保护的成员。还?全局匿名联合必须是静?static)的,否则必L在匿名名字空间中?br /><br />7、几炚w要讨论的地方Q?br />   1、联合里面那些东西不能存放?<br />      我们知道Q联合里面的东西׃n内存Q所以静态、引用都不能用,因ؓ他们不可能共享内存?br />   2、类可以攑օ联合吗?<br />      我们先看一个例子:<br />      class test<br />      <<br />      public:<br />    test():data(0) < ><br />      private:<br />          int data;<br />      >;<br /><br />     typedef union _test<br />     <<br /> test test;   file://Q?Q?Q?<br />     >ui;   <br />     ~译通不q,Z么呢Q?br />     因ؓ联合里不允许存放带有构造函数、析够函数、复制拷贝操作符{的c,因ؓ他们׃n内存Q编译器无法保证q些对象不被破坏Q也无法保证d时调用析够函数?br />    3、又是匿名惹的祸Q?<br />       我们先看下一D代码:  <br /> class test<br /> <<br />        public:<br />             test(const  char* p);<br />             test(int in);<br />             const operator char*() const <return data.ch;=""><br />             operator long() const <return data.l;=""><br />        private:<br />     enum type <int, string="">;<br />            union <br />     <<br />  const char* ch;<br />  int i;<br />      >datatype;<br />      type stype;<br />      test(test&);<br />      test& operator=(const test&);<br />        >;<br />       test::test(const  char *p):stype(string),datatype.ch(p)     < ><br />       test::test(int in):stype(int),datatype.l(i)     < ><br />     看出什么问题了吗?呵呵Q编译通不q。ؓ什么呢Q难道datatype.ch(p)和datatype.l(i)有问题吗Q?br />     哈哈Q问题在哪呢Q让我们来看看构造test对象时发生了什么,当创建test对象Ӟ自然要调用其相应的构造函敎ͼ在构造函C当然要调用其成员的构造函敎ͼ所以其要去调用datatype成员的构造函敎ͼ但是他没有构造函数可调用Q所以出错?br />     注意了,q里可ƈ不是匿名联合Q因为它后面紧跟了个data! <br />    4、如何有效的防止讉K出错Q?br />       使用联合可以节省内存I间Q但是也有一定的风险Q通过一个不适当的数据成员获取当前对象的|例如上面的ch、i交错讉K?br />       Z防止q样的错误,我们必须定义一个额外的对象Q来跟踪当前被存储在联合中的值得cdQ我们称q个额外的对象ؓQunion的判别式?br />       一个比较好的经验是Q在处理作ؓcL员的union对象Ӟ为所有union数据cd提供一l访问函数?/int,></return></return></font> </p> <img src ="http://m.shnenglu.com/Backkom-Li/aggbug/10303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Backkom-Li/" target="_blank">在寒风中叶落</a> 2006-07-21 12:56 <a href="http://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>协议的定义及意义http://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10302.html在寒风中叶落在寒风中叶落Fri, 21 Jul 2006 04:45:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10302.htmlhttp://m.shnenglu.com/Backkom-Li/comments/10302.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/07/21/10302.html#Feedback0http://m.shnenglu.com/Backkom-Li/comments/commentRss/10302.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/10302.html 如何定义|络协议Q它有哪些意义?
    协议是对|络中设备以何种方式交换信息的一pd规定的组?/font>Q它对信息交换的速率、传输代码、代码结构、传输控制步骤、出错控制等许多参数作出定义?

  |络是一个相互联l的大群体,因此要想加入到这个群体中来,׃能随心所Ԍȝ兴之所发。就好象一个国家或一个种族拥有自q语言Q大安必须通晓q凭借这U语a来对话一P怺联结的网l中各个节点也需要拥有共同的“语a”,依据它所定义的规则来控制数据的传递,q种语言便是大家l常听说?“协议”。协议是对网l中讑֤以何U方式交换信息的一pd规定的组合,它对信息交换的速率、传输代码、代码结构、传输控制步骤、出错控制等许多参数作出定义?

  对网l始入门者来_UL复杂的协议常常让人头痛不巜y这些协议各起什么作用?它们之间又有什么联p?Z么有了A协议q需要补充B协议Q这些问题搞不清楚,往往成ؓq一步学习的障碍。其实这个问题应该这L解:是先有了各种不同语言的民族,后来随着C会的发展,才有了不同民族间交流的需求。网l也是这P最初h们在范围内建立|络Q只需要自׃一些简单的U定Q保证这一有限范围内的用户遵守可以了Q到后来|络规模来大Q才考虑到制定更严格的规章制度即协议Q而ؓ了实现多个不同网l的互联Q又会增加不新协议作ؓ补充Q或成长为统一的新标准?

  数据在网l中由源传输到目的地Q需要一pd的加工处理,Z便于理解Q我们这里不妨打个比喅R如果我们把数据比做巧克力:我们可以把加工y克力的设备作为源Q而把消费者的手作为目的来看看会有什么样的传输过E。y克力厂通常会ؓ每块巧克力外边加上一层包装,然后q会若qy克力装入一个y克力盒,再把几个巧克力盒一赯入一个外包装Q运输公司还会把许多y克力装入一个集装箱Q到达消费者所在的城市后,又会p输商、批发商、零售商、消费者打开不同的包装层。不同层ơ的包装、解包装需要不同的规范和设备,计算机网l也同样有不同的装、传输层面,为此国际标准化组lISO?978 q提出“开攄l互q参考模型”,卌名的OSI(Open System Interconnection)七层模型Q它是我们后箋幅中要介绍的内容,q里先不展开?|络的协议就是用作这些不同的|络层的行ؓ规范的。网l在发展q程中Ş成了很多不同的协议族Q每一协议族都在网l的各层对应有相应的协议Q其中作为Internet规范的是ICP/IP协议族,q也是我们今天要讲的?

TCP/IP协议的定义以及层ơ、功?

什么是TCP/IP协议Q划为几层,各有什么功能?
  TCP/IP协议族包含了很多功能各异的子协议。ؓ此我们也利用上文所q的分层的方式来剖析它的l构?font style="BACKGROUND-COLOR: #7fffd4">TCP/IP层次模型共分为四层:应用层、传输层、网l层、数据链路层?

TCP/IP|络协议
  TCP/IP(Transmission Control Protocol/Internet ProtocolQ传输控制协?|间|协?是目前世界上应用最为广泛的协议Q它的流行与Internet的迅猛发展密切相关—TCP/IP最初是Z联网的原型ARPANET所设计的,目的是提供一整套方便实用、能应用于多U网l上的协议,事实证明TCP/IP做到了这一点,它ɾ|络互联变得ҎhQƈ且ɭ来多的网l加入其中,成ؓInternet的事实标准?

* 应用?/font>—应用层是所有用h面向的应用程序的l称。ICP/IP协议族在q一层面有着很多协议来支持不同的应用Q许多大家所熟悉的基于Internet的应用的实现q不开q些协议。如我们q行万维|(WWWQ访问用CHTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析?font style="BACKGROUND-COLOR: #7fffd4">DNS协议?q程d?font style="BACKGROUND-COLOR: #7fffd4">Telnet协议{等Q都是属于TCP/IP应用层的Q就用户而言Q看到的是由一个个软g所构筑的大多ؓ囑Ş化的操作界面Q而实际后台运行的便是上述协议?

* 传输?/font>—这一层的的功能主要是提供应用E序间的通信QTCP/IP协议族在q一层的协议?font style="BACKGROUND-COLOR: #7fffd4">TCP和UDP?

* |络?/font>—是TCP/IP协议族中非常关键的一层,主要定义了IP地址格式Q从而能够得不同应用类型的数据在Internet上通畅C输,IP协议是一个网l层协议?

* |络接口?/font>—这是TCP/IP软g的最低层Q负责接收IP数据包ƈ通过|络发送之Q或者从|络上接收物理Q抽出IP数据报,交给IP层?

1QTCP/UDP协议
  TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输Q它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向q接、端到端和可靠的数据包发送。通俗_它是事先为所发送的数据开辟出q接好的通道Q然后再q行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来_TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经的应用。TCP支持的应用协议主要有QTelnet、FTP、SMTP{;UDP支持的应用层协议主要有:NFSQ网l文件系l)、SNMPQ简单网l管理协议)、DNSQ主域名U系l)、TFTPQ通用文g传输协议Q等?

IP协议的定义、IP地址的分cd特点

什么是IP协议QIP地址如何表示Q分为几c,各有什么特点?
  Z便于d和层ơ化地构造网l,IP地址被分为A、B、C、D、E五类Q商业应用中只用到A、B、C三类?

  IP协议(Internet Protocol)又称互联|协议,是支持网间互q的数据报协议,它与TCP协议Q传输控制协议)一h成了TCP/IP协议族的核心。它提供|间q接的完善功能, 包括IP数据报规定互q网l范围内的IP地址格式?

  Internet 上,Z实现q接C联网上的l点之间的通信Q必Mؓ每个l点Q入|的计算机)分配一个地址Qƈ且应当保证这个地址是全|唯一的,q便是IP地址?

  目前的IP地址QIPv4QIPW?版本Q由32个二q制位表C,?位二q制Cؓ一个整敎ͼ中间由小数点间隔Q如159.226.41.98Q整个IP地址I间?l?位二q制敎ͼpCZ机所在的|络的地址Q类似部队的~号Q以及主机在该网l中的标识(如同士兵在该部队的编P共同l成?

  Z便于d和层ơ化的构造网l,IP地址被分为A、B、C、D、E五类Q商业应用中只用到A、B、C三类?

* Acd址QAcd址的网l标识由W一l?位二q制数表C,|络中的L标识?l?位二q制敎ͼAcd址的特Ҏ|络标识的第一位二q制数取值必Mؓ?”。不隄出,Acd址允许?26个网D,每个|络大约允许?670万台LQ通常分配l拥有大量主机的|络Q如d|)?

* Bcd址QBcd址的网l标识由前两l?位二q制数表C,|络中的L标识占两l?位二q制敎ͼBcd址的特Ҏ|络标识的前两位二进制数取值必Mؓ?0”。Bcd址允许?6384个网D,每个|络允许?5533C机,适用于结Ҏ较多的网l(如区域网Q?

* Ccd址QCcd址的网l标识由?l?位二q制数表C,|络中主机标识占1l?位二q制敎ͼCcd址的特Ҏ|络标识的前3位二q制数取值必Mؓ?10”。具有Ccd址的网l允许有254C机,适用于结Ҏ较少的网l(如校园网Q?

  Z便于记忆Q通常习惯采用4个十q制数来表示一个IP地址Q十q制C间采用句点?”予以分隔。这UIP地址的表C方法也被称为点分十q制法。如以这U方式表C,Acȝl的IP地址范围?.0.0.1Q?27.255.255.254QBcȝl的IP地址范围为:128.1.0.1Q?91.255.255.254QCcȝl的IP地址范围为:192.0.1.1Q?23.255.255.254?

  ׃|络地址紧张、主机地址相对q剩Q采取子|掩码的方式来指定网D号?

  TCP/IP协议与低层的数据链\层和物理层无养Iq也是TCP/IP的重要特炏V正因ؓ如此 Q它能广泛地支持׃两层协议构成的物理网l结构。目前已使用TCP/IPq接成洲际网、全国网与跨地区|?/font>



]]>输出素数代码http://m.shnenglu.com/Backkom-Li/archive/2006/07/19/10233.html在寒风中叶落在寒风中叶落Wed, 19 Jul 2006 12:46:00 GMThttp://m.shnenglu.com/Backkom-Li/archive/2006/07/19/10233.htmlhttp://m.shnenglu.com/Backkom-Li/comments/10233.htmlhttp://m.shnenglu.com/Backkom-Li/archive/2006/07/19/10233.html#Feedback2http://m.shnenglu.com/Backkom-Li/comments/commentRss/10233.htmlhttp://m.shnenglu.com/Backkom-Li/services/trackbacks/10233.html 

 1 #include < iostream >
 2 #include < memory >
 3
 4 using   namespace  std;
 5
 6 // #define iMax 1000000
 7
 8 #define  iMax 100
 9
10 int  Odd[iMax];
11
12 int  main()
13 {
14     memset(Odd, true , sizeof (Odd));
15      for ( int  i = 2 ;i <= iMax / 2 ;i ++ )
16      {
17          if (Odd[i])
18          {
19              for ( int  j = 1 ;j < iMax / i;j ++ )
20              {
21                 Odd[i + i * j] = false ;
22             }

23         }

24     }

25      for ( int  k = 2 ;k < iMax;k ++ )
26          if (Odd[k])
27             cout  << k << endl;
28      return   1 ;
29 }


]]>
ձձȾþþƷ| ƷþƷ| þݺҹҹavapp | ˾þô߽AVɫɫ | þþþƷ| þһձɫۺϾþ| þҹɫƷ鶹 | ޳˾þ| þþƷAV㽶| þþݾþþ| ҹƷþþĸ | ޹Ʒ˾þ| һɫþHEZYO| ŷþۺŷ| þþþþþþþþ| þۺϾɫۺϾ99| þۺϳDž| ޹Ʒþþþ| պ޹ۺϾþþ| 97þþþ޾Ʒר| Ʒþ¶| þþۺϾɫۺ98| ŷպƷþþѹۿ| þþþþúݺݶ| ƷһþþƷɬ| þþþƷþþþþ| ԭ1769þѲ| þۺϸþúݺ97ɫ| ŷ޹Ʒþþþ| þ99Ʒ鶹ѿ| ƷþþþþþþѼ | þþƷѲ| þ91Ʒ91þû| þþþŮAAƬ| ޹Ʒþ| þþ99ƷƬĻ| ĻѾþ| ܻƺ۵վþmimiɫ| þþƷһ| ߳߳þþ91 | ɫۺϾþۺۺ|