??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久久国产精品免费无码,久久婷婷五月综合97色直播,精品国产乱码久久久久久呢 http://www.shnenglu.com/horsetail/category/3487.html花儿,M有谢的时?/description>zh-cnMon, 19 May 2008 20:30:02 GMTMon, 19 May 2008 20:30:02 GMT60数组?---不同的时?不同的表?/title><link>http://www.shnenglu.com/horsetail/articles/18348.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sun, 04 Feb 2007 16:30:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/18348.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/18348.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/18348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/18348.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/18348.html</trackback:ping><description><![CDATA[1、数l名Q?1)当一个数l标识符出现在表辑ּ中,q个标识W的cd׃“某U类型T的数l”{换成“指向类型T的指针”,而且它的值就{于数组W一个元素的地址。但是当数组标识W被用作sizeof和取址(&)操作的操作数Ӟsizeofq回的是整个数组的大,而取址操作q回的是指向数组的指?而不是指向一个gؓ数组头元素地址的指针的指针)?img src ="http://www.shnenglu.com/horsetail/aggbug/18348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-02-05 00:30 <a href="http://www.shnenglu.com/horsetail/articles/18348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>"? 预处理命?/title><link>http://www.shnenglu.com/horsetail/articles/18345.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sun, 04 Feb 2007 16:19:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/18345.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/18345.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/18345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/18345.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/18345.html</trackback:ping><description><![CDATA[         <font color="#ff0000">#define 标识W?字符?br />         </font><font color="#000000">以上是宏命o的一般Ş?上面所说的"字符?不是我们qx所说的那个"字符?变量.q点学要注意一?img height="19" src="http://www.shnenglu.com/Emoticons/72_72.gif" width="19" border="0" />!!它只是我们将要代替的东西.哪怕是 int也可?<br />         宏的作用是在本文g?用指定的标识W来代替字符??font color="#ff0000">~译预处理的时?/font><font color="#000000">,程序中该命令出现的所有标识符,用相应的字符串代?q样我们可以用很简单的名字代替一个很长的字符?包括数字帔R).<br /></font>         当然,我们可以在需要的时?告诉~译?我们不再需要某个宏,让它从我们的E序上消?!!<br />         ?#undef  命o可以告诉~译?我们已经不再需要某个宏?它的一般Ş式如?<br />         <font color="#ff0000">#undef   标识W?br /></font>                  <br />         下面是宏的几点说?<br />NO.1      宏名(标识W?一般习惯用大写字符,q样方便我们区分变量.当然,q不是必ȝ,我们一样可以用写字符命名!<br />NO.2      使用宏名代替一个字W串,可以减少我们重复书写某些字符串的工作?但是它仅仅是字符串的单替?它不做正性检?!正因为它只是单的替换.所?使用不当,可能会造成E序代码的膨胀!!q就何不试?<br />NO.3      宏定义不是C/C++~程语言的语?所以它不必在行加分号.如果加了分号则连同分号一赯行置??<br />#define HO 13.2;<br />...<br />float fd=HO+HO;<br />在宏展开?<br />float fd=13.2;+13.2;<br />...<br />很明?q是一个错误的E序!!!!<br />NO.4      宏出现在E序中函数的外面,宏名的有效范围ؓ定义宏名之后到源文g?我们也可以用 #undef  提前l止宏定义的作用?<br />NO.5      我们也可以在宏定义的时候引用宏?可以层层叠加!<br />#define R 3.0<br />#define  J 63<br />#define P 47*J<br />#define L R*J*P<br /><br />q样 L 展开?br />3.0*63*47*63<br /><br /><br />睡觉!!!!我也是新?哪里错的ȝ提一?好么</font><img src ="http://www.shnenglu.com/horsetail/aggbug/18345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-02-05 00:19 <a href="http://www.shnenglu.com/horsetail/articles/18345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基类虚函数返回类型与子类的可以不?/title><link>http://www.shnenglu.com/horsetail/articles/18316.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sat, 03 Feb 2007 16:22:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/18316.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/18316.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/18316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/18316.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/18316.html</trackback:ping><description><![CDATA[         在最新版的C++标准中,虚函数的q回cd可以不同Q但必须是同一l承体系中的cd。  ?br /> 比如: 基类指针和子cL?基类引用和子cd?基类对象和子cd象?此段载自:csdn论坛)<br />         上面列出来的,必须一一对应.不可以基c返回基cL?而派生类q回的却是对象或引用(不管是派生类的还是基cȝ).<br /><img src ="http://www.shnenglu.com/horsetail/aggbug/18316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-02-04 00:22 <a href="http://www.shnenglu.com/horsetail/articles/18316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[C++ Primer 关键概念] 已初始化变量与未初始化变?/title><link>http://www.shnenglu.com/horsetail/articles/17847.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sat, 20 Jan 2007 14:06:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/17847.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/17847.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/17847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/17847.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/17847.html</trackback:ping><description><![CDATA[      在C++中,初始话是一个非帔R要的概念。对它的讨论诏I本书(C++  Primer 4Q的始终?br />      已初始化变量是指变量在定义时q定一个倹{未初始化变量则未给定初始|<br />      int va11=0;  //初始?br />      int va12;  //未初始化<br />l变量一个初始值几乎L真确的,但不要求必须q样做。当我们定变量在第一ơ用时会赋一个新|那就不需要创建初始倹{例如,我们本节开始我们的W一个有意义的程序中Q定义了未初始化变量Qƈ立即d值给他们?br />       定义变量Ӟ应该l变量赋初始|除非定变量用于其他意图之前会覆盖q个初倹{如果不能保证读取变量之前重|变量,应该初始化变量?br /><img src ="http://www.shnenglu.com/horsetail/aggbug/17847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-01-20 22:06 <a href="http://www.shnenglu.com/horsetail/articles/17847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转蝲]C++命名规则http://www.shnenglu.com/horsetail/articles/17829.html[HORSETAIL][HORSETAIL]Sat, 20 Jan 2007 09:40:00 GMThttp://www.shnenglu.com/horsetail/articles/17829.htmlhttp://www.shnenglu.com/horsetail/comments/17829.htmlhttp://www.shnenglu.com/horsetail/articles/17829.html#Feedback0http://www.shnenglu.com/horsetail/comments/commentRss/17829.htmlhttp://www.shnenglu.com/horsetail/services/trackbacks/17829.html    如果惌有效的管理一个稍微复杂一点的体系Q针对其中事物的一套统一、带层次l构、清晰明了的命名准则是必不可少而且非常好用的工兗?

    z跃在生物学、化学、军队、监狱、黑C会、恐怖组l等各个领域内的大量有识先辈们都曄无数ơ地以实际行动证明了以上公理的正性。除了上帝(讑֮可以改变世间万物的秩序)以外Q相信没人有实力对它不屑一?/p>

    在Y件开发这一高度抽象而且十分复杂的活动中Q命名规则的重要性更昑־ؓH出。一套定义良好ƈ且完整的、在整个目中统一使用的命名规范将大大提升源代码的可读性和软g的可l护性?/p>

在引入细节之前,先说明一下命名规范的整体原则Q?/p>

同一?/td>在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格Q保持命名风格在整个模块中的同一性?

 

标识W组?/td>标识W采用英文单词或其组合,应当直观且可以拼读,可望文知意,用词应当准确?

 

最化长度 && 最大化信息量原?/td>在保持一个标识符意思明的同时Q应当尽量羃短其长度?

 

避免q于怼不要出现仅靠大小写区分的怼的标识符Q例如“i”与“I”,“function”与“Function”等{?

 

避免在不同别的作用域中重名E序中不要出现名字完全相同的局部变量和全局变量Q尽两者的作用域不同而不会发生语法错误,但容易解?

 

正确命名h互斥意义的标识符用正的反义词组命名h互斥意义的标识符Q如Q?nMinValue"?nMaxValue"Q?GetName()" ?"SetName()" ....

 

避免名字中出现数字编?/font>量避免名字中出现数字编P如Value1,Value2{,除非逻辑上的需要编受这是ؓ了防止程序员hQ不肯ؓ命名动脑{而导致生无意义的名字(因ؓ用数字编h省事Q?/td>

 

c?l构

除了异常cȝ个别情况Q不希望用户把该cȝ作一个普通的、正常的cM情况Q外QC++c?l构
的命名应该遵循以下准则:
 
C++c?l构的命?/td>cȝ名称都要以大写字母“C”开_后跟一个或多个单词。ؓ便于界定Q每个单词的首字母要大写?

 

推荐的组成Ş?/font>cȝ命名推荐?名词"?形容词+名词"的Ş式,例如Q?CAnalyzer", "CFastVector" ....

不同于C++cȝ概念Q传l的Cl构体只是一U将一l数据捆l在一L方式。传lCl构体的命名规则为:

传统Cl构体的命名传统Cl构体的名称全部由大写字母组成,单词间用下划线界定Q例如:"SERVICE_STATUS", "DRIVER_INFO" ....

 

函数

函数的命?/td>函数的名U由一个或多个单词l成。ؓ便于界定Q每个单词的首字母要大写?

 

推荐的组成Ş?/font>函数名应当?动词"或?动词Q名?/span>"Q动宾词l)的Ş式。例如:"GetName()", "SetValue()", "Erase()", "Reserve()" ....

 

保护成员函数保护成员函数的开头应当加上一个下划线“_”以C区别,例如Q?_SetState()" ....

 

U有成员函数cM圎ͼU有成员函数的开头应当加上两个下划线“__”,例如Q?__DestroyImp()" ....

 

虚函?/font>虚函C惯以“Do”开_如:"DoRefresh()", "_DoEncryption()" ....

 

回调和事件处理函?/font>回调和事件处理函C惯以单词“On”开头。例如:"_OnTimer()", "OnExit()" ....

 

变量

变量应该是程序中使用最多的标识W了Q变量的命名规范可能是一套C++命名准则中最重要的部分:

变量的命?/td>变量名由作用域前~Q类型前~Q一个或多个单词l成。ؓ便于界定Q每个单词的首字母要大写?

对于某些用途简单明了的局部变量,也可以用简化的方式Q如Qi, j, k, x, y, z ....

 

作用域前~作用域前~标明一个变量的可见范围。作用域可以有如下几U:
前缀说明
?/i>局部变?/td>
m_cȝ成员变量QmemberQ?/td>
sm_cȝ静态成员变量(static memberQ?/td>
s_静态变量(staticQ?/td>
g_外部全局变量QglobalQ?/td>
sg_静态全局变量Qstatic globalQ?/td>
gg_q程间共享的׃n数据D全局变量Qglobal globalQ?/td>

除非不得Ԍ否则应该可能少使用全局变量?

 

cd前缀cd前缀标明一个变量的cdQ可以有如下几种Q?
前缀说明
n整型和位域变量(numberQ?/td>
e枚D型变量(enumerationQ?/td>
c字符型变量(charQ?/td>
b布尔型变量(boolQ?/td>
f点型变量(floatQ?/td>
p指针型变量和q代子(pointerQ?/td>
pfn特别针对指向函数的指针变量和函数对象指针Qpointer of functionQ?/td>
g数组QgridQ?/td>
icȝ实例QinstanceQ?

对于l常用到的类Q也可以定义一些专门的前缀Q如Qstd::string和std::wstringcȝ前缀可以定义?st"Qstd::vectorcȝ前缀可以定义?v"{等?/p>

cd前缀可以l合使用Q例?gc"表示字符数组Q?ppn"表示指向整型的指针的指针{等?

 

推荐的组成Ş?/font>变量的名字应当?名词"或?形容词+名词"。例如:"nCode", "m_nState"Q?nMaxWidth" ....

 

帔R

C++中引入了对常量的支持Q常量的命名规则如下Q?/p>
帔R的命?/td>帔R名由cd前缀Q全大写字母l成Q单词间通过下划U来界定Q如Q?font face="Fixedsys" color="#808080">cDELIMITER, nMAX_BUFFER ....

cd前缀的定义与变量命名规则中的相同?/p>

 

枚D、联合、typedef

枚D、联合及typedef语句都是定义新类型的单手D,它们的命名规则ؓQ?/p>
枚D、联合、typedef的命?/td>枚D、联合、typedef语句生成的类型名由全大写字母l成Q单词间通过下划U来界定Q如Q?font face="Fixedsys" color="#0000ff">FAR_PROC, ERROR_TYPE ....

 

宏、枚丑ր?br />

宏、枚丑ր的命名宏和枚D值由全大写字母组成,单词间通过下划U来界定Q如Q?font face="Fixedsys" color="#ff8000">ERROR_UNKNOWN, OP_STOP ....


 



[HORSETAIL] 2007-01-20 17:40 发表评论
]]>
[C++ Primer 注解]return语句后面的分?/title><link>http://www.shnenglu.com/horsetail/articles/17828.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sat, 20 Jan 2007 09:03:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/17828.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/17828.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/17828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/17828.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/17828.html</trackback:ping><description><![CDATA[      注意return语句后面的分受在C++中多数语句以分号作ؓl束标志。分号很Ҏ被忽略,而漏写分号将会导致莫名其妙的~译错误信息?img src ="http://www.shnenglu.com/horsetail/aggbug/17828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-01-20 17:03 <a href="http://www.shnenglu.com/horsetail/articles/17828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]异常的几点说?/title><link>http://www.shnenglu.com/horsetail/articles/17820.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sat, 20 Jan 2007 05:29:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/17820.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/17820.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/17820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/17820.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/17820.html</trackback:ping><description><![CDATA[ <p>作者:<font color="#800080">Horsetail</font></p> <p>查看普通函数声明的时候,不可能确定该函数会抛Z么异常,但是Qؓ了编写适当的catch子句Q了解函数是否抛出异总及会抛出那种异常是很有用的?font color="#000000">异常说明指定Q如果函数抛出异常,被抛出异常将是包含在说明中的一U,或者是从列出的异常中派生的cd</font></p> <p>异常说明的定义:</p> <p>异常说明跟在函数形参之后Quoge异常说明在关键字throw之后跟着一个(可能为空的)由圆括号括住的异常类型类表。如Q?/p> <p>void recoup (int) throw(int);</p> <p>注意Q如果异常类型列表ؓI,则可以抛ZQ何异常!</p> <p>成员函数声明中,异常说明跟在const后面Q?/p> <p>异常说明是函数接口的一部䆾,函数定义以及该函数的L声明必须h相同的异常说明!</p> <p>基类中的一明可以与zcȝ不一P但是zcM的异常说明要和对应基cM的一样严|或更严格Q?/p> <img src ="http://www.shnenglu.com/horsetail/aggbug/17820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-01-20 13:29 <a href="http://www.shnenglu.com/horsetail/articles/17820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[~程爱好者论坛]关于成员函数与承的问题http://www.shnenglu.com/horsetail/articles/17819.html[HORSETAIL][HORSETAIL]Sat, 20 Jan 2007 05:28:00 GMThttp://www.shnenglu.com/horsetail/articles/17819.htmlhttp://www.shnenglu.com/horsetail/comments/17819.htmlhttp://www.shnenglu.com/horsetail/articles/17819.html#Feedback0http://www.shnenglu.com/horsetail/comments/commentRss/17819.htmlhttp://www.shnenglu.com/horsetail/services/trackbacks/17819.html作者:未知

protected函数在类及其l承cȝ内部调用。因此,如果一个类可以调用其它cȝpublic成员函数Q如果这个类是另一个类的子c,则还可以调用它的protected成员函数。——即使不使用friend也是可以的。但如果需要跨qprivate/protected的限制来调用cȝ成员函数Q则需要用friend声明。一般而言Q在设计时应该尽量少使用或不使用friend?br />
静态的成员函数通过cd来调用(如果在类的内部,cd可省略)Q非静态的成员函数通过cȝ对象来调用?/p>

[HORSETAIL] 2007-01-20 13:28 发表评论
]]>
[~程爱好者论坛]delete问题Q其一Q?/title><link>http://www.shnenglu.com/horsetail/articles/17818.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sat, 20 Jan 2007 05:27:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/17818.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/17818.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/17818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/17818.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/17818.html</trackback:ping><description><![CDATA[ <p>作者:未知</p> <p>delete只是把空间的独占权取消了Qƈ没有随之抚w原存储的数据<br /><br />如果传入引用<br />那么传进来的是指向原来你所甌的指针的指针<br />在释攄占权之后q行的清I是全局清空<br />而传入的是指针本w的?br />清零操作可以被看成局部操作,不媄响主E序的原始指?/p> <img src ="http://www.shnenglu.com/horsetail/aggbug/17818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-01-20 13:27 <a href="http://www.shnenglu.com/horsetail/articles/17818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[未知]关于return及主函数q回cd的问?_?http://www.shnenglu.com/horsetail/articles/17816.html[HORSETAIL][HORSETAIL]Sat, 20 Jan 2007 05:26:00 GMThttp://www.shnenglu.com/horsetail/articles/17816.htmlhttp://www.shnenglu.com/horsetail/comments/17816.htmlhttp://www.shnenglu.com/horsetail/articles/17816.html#Feedback0http://www.shnenglu.com/horsetail/comments/commentRss/17816.htmlhttp://www.shnenglu.com/horsetail/services/trackbacks/17816.html关于C语言中return的一些ȝ 
return是C++预定义的语句Q它提供了种植函数执行的一U放大。当return语句提供了一个值时Q这个值就成ؓ函数的返回? 
说到return,有必要提及主函数的定?下面是从|络上找到的资料,好好消化?对了解主函数中返回值的理解有很大的帮助. 
很多人甚臛_面上的一些书c,都用了void main( ) Q其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主上的 FAQ 中明地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.Q void main( ) 从来׃存在于 C++ 或者 C Q。下面我分别说一下 C 和 C++ 标准中对 main 函数的定义。?br />1. C 
在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 2eQ《C E序设计语言W二版》)用的是 main( )。不q在最新的 C99 标准中,只有以下两种定义方式是正的Q?br />int main( void ) 
int main( int argc, char *argv[] ) 
Q参考资料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startupQ?br />当然Q我们也可以做一点小的改动。例如:char *argv[] 可以写成 char **argvQargv 和 argc 可以Ҏ别的变量名(如 intval 和 charvalQ,不过一定要W合变量的命名规则。?br />如果不需要从命o行中获取参数Q请用int main(void) Q否则请用int main( int argc, char *argv[] ) 。?br />main 函数的返回值类型必L int Q这栯回值才能传递给E序的激z者(如操作系l)。?br />如果 main 函数的最后没有写 return 语句的话QC99 规定~译器要自动在生成的目标文g中(如 exe 文gQ加入return 0; Q表C程序正帔R出。不q,我还是徏议你最好在main函数的最后加上return 语句Q虽然没有这个必要,但这是一个好的习惯。注意,vc6不会在目标文件中加入return 0; Q大概是因ؓ vc6 是?8 q的产品Q所以才不支持这个特性。现在明白我Z么徏议你最好加上 return 语句了吧Q不q,gcc3.2QLinux 下的 C ~译器)会在生成的目标文件中加入 return 0; 。?br />
2. C++ 
C++98 中定义了如下两种 main 函数的定义方式: 
int main( ) 
int main( int argc, char *argv[] ) 
Q参考资料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and terminationQ?br />int main( ) {同于 C99 中的 int main( void ) Qint main( int argc, char *argv[] ) 的用法也和 C99 中定义的一栗同Pmain 函数的返回值类型也必须是int。如果main函数的末没写return语句QC++98 规定~译器要自动在生成的目标文g中加入 return 0; 。同Pvc6 也不支持q个Ҏ,但是 g++3.2QLinux 下的 C++ ~译器)支持。?br />
3. 关于 void main 
在 C 和 C++ 中,不接收Q何参C不返回Q何信息的函数原型为“void foo(void);”。可能正是因个,所以很多h都误认ؓ如果不需要程序返回值时可以把main函数定义成void main(void) 。然而这是错误的Qmain 函数的返回值应该定义ؓ int cdQC 和 C++ 标准中都是这栯定的。虽然在一些编译器中,void main 可以通过~译Q如 vc6Q,但ƈ非所有编译器都支持 void main Q因为标准中从来没有定义q void main 。g++3.2 中如果 main 函数的返回g是 int cdQ就Ҏ通不q编译。而 gcc3.2 则会发出警告。所以,如果你想你的E序拥有很好的可UL性,请一定要用 int main 。?br />
4. q回值的作用 
main 函数的返回值用于说明程序的退出状态。如果返回?Q则代表E序正常退出,否则代表E序异常退出。下面我们在 winxp 环境下做一个小实验。首先编译下面的E序Q?br />int main( void ) 

return 0; 

然后打开附g里的“命令提C符”,在命令行里运行刚才编译好的可执行文gQ然后输入“echo %ERRORLEVEL%”,回RQ就可以看到E序的返回gؓ 0 。假讑ֈ才编译好的文件是 a.exe Q如果输入“a && dir”,则会列出当前目录下的文g夹和文g。但是如果改成“return -1”,或者别的非 0 |重新~译后输入“a && dir”,则 dir 不会执行。因为?amp;& 的含义是Q如果?amp;& 前面的程序正帔R出,则l执行?amp;& 后面的程序,否则不执行。也是_利用E序的返回|我们可以控制要不要执行下一个程序。这是 int main 的好处。如果你有兴,也可以把 main 函数的返回值类型改成非 int cdQ如 floatQ,重新~译后执行“a && dir”,看看会出C么情况,xZ么会出现那样的情c顺便提一下,如果输入 a || dir 的话Q则表示如果 a 异常退出,则执行 dir 。?br />5. 那么 intmain(intargc,char*argv[],char*envp[])呢? 
q当然也不是标准 C 里面定义的东西!char*envp[] 是某些编译器提供的扩展功能,用于获取pȝ的环境变量。因Z是标准,所以ƈ非所有编译器都支持,故而移植性差Q不推荐使用。?br />Cq里,你应该了解ؓ什么主函数定义为 intq回cd,而且函数体里面有return 0;q个语句了吧. 
下面具体说说我对return的应用的理解。?br />只要一个函数的q回值是数字型的,那么可以返?(即return 0),其实你返回多都没问题。一般情况下QC++做出来的函数都要求返回一个|当函数执行正常,且达C一般情况下的目的,那么p?表示正确的调用了该函敎ͼq个0是q回l主调函C通知没有出错的;如果函数调用中出错,或者没有按照一般情冉|行,那么p?Q以告知主调函数采取响应{略Q如果你在某个函数所在类的定义所在的头文件中定义了一l状态|一般都是负整数Q,那么函数可以返回不同的g告之主调函数具体发生了什么异常或错误Q这U情况一般用于函数功能独立性较差的的情c所以一般不鼓励把函数返回类型定义ؓvoidQ至返回应该是intQ而在函数的最后加上return 0.语句Q?br />int func(参数列表) 

……?br />……?br />……?br />Return 0; 

在函CQ如果碰到return 语句Q那么程序就会返回调用该函数的下一条语句执行,也就是说跛_函数的执行,回到原来的地方l执行下厅R但是如果是在主函数中碰到return语句Q那么整个程序就会停止,退出程序的执行。?br />如果你定义一个函数有q回cdQ可以想下面那样调用Q?br />int func() 

int value; 
……?br />……?br />……?br />return value; 

int main() 

int intvalue; 
intvalue=func(); 
……?br />……?br />teturn 0; 

return语句后面具体是什么内容,q就要具体情况具体分析了Q?br />Q?Q 在q回cd是char的函CQreturn后应该是charcd的| 
Q?Q 在q回cd是int的函CQ如果是要停止函数的调用Q最好应该ؓ0Q其他的按照你的目的而定Q只要是int cdp了?br />Q?Q 在q回cd是结构类型的函数中,return后应该是l构的一个实例对象。?br />MQ函数定义ؓ什么样的返回类型,该函Creturn后就应该是相应类型的倹{?img src ="http://www.shnenglu.com/horsetail/aggbug/17816.html" width = "1" height = "1" />

[HORSETAIL] 2007-01-20 13:26 发表评论
]]>
[原创]关于虚承中的一炚w?/title><link>http://www.shnenglu.com/horsetail/articles/17817.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sat, 20 Jan 2007 05:26:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/17817.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/17817.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/17817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/17817.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/17817.html</trackback:ping><description><![CDATA[ <p>作者:Horsetail</p> <p>先看看下面这个程序先Q?/p> <p>#include <iostream><br />#include <stdio.h><br />class A{<br />public:<br /> A(){std::cout<<"here is class A"<<std::endl;}<br /> A(int a){std::cout<<a<<std::endl;}<br /> void fun(){std::cout<<"Ten FUN in the A"<<std::endl;return;}<br />};<br />class B:public A{<br />public:<br /> void fun(){std::cout<<"Ten FUN in the B"<<std::endl;return;}<br /> B():A(0){std::cout<<"here is class B"<<std::endl;}<br />};<br />struct C:A,B{ C():A(1){std::cout<<"here is class C"<<std::endl;}<br />};<br />//</p> <p>int main()<br />{<br /> C c;<br />char i=0;</p> <p>getchar();<br /> return 0;<br />}</p> <p>        ~译器可以通过~译Q但是当我们在main()函数中调用基cA中的fun()函数Ӟ出错了Q因为在BcM也承了Ac,当在main()中调用funӞ~译器不能确定是直接调用AcM的fun()q是通过Acȝl承cB间接调用AcM的fun()Q因此,在我们承成员中如果有相同的父类Q我们应该声明虚l承Q?/p> <p>在虚l承的同Ӟ我们q应该注意下面这个问题:</p> <p>         当我们多虚承一个类时如果在基类集中存在两个或两个以上同L基类且其中有一个基cM用了virtual关键字。则其余相同的基cdd部都要用virtual关键字!否则不能通过~译</p> <img src ="http://www.shnenglu.com/horsetail/aggbug/17817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-01-20 13:26 <a href="http://www.shnenglu.com/horsetail/articles/17817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]staticcL员函?/title><link>http://www.shnenglu.com/horsetail/articles/17815.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sat, 20 Jan 2007 05:25:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/17815.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/17815.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/17815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/17815.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/17815.html</trackback:ping><description><![CDATA[ <p>作者:<a class="titlink" title="Horsetail的空?http://hi.baidu.com/horsetail" ><font color="#800080">Horsetail</font></a><br /><br />在类内部声明static成员函数的时候,必须指定static关键字。然而,在类外部定义cL员函数的时候,则一定不可以出现static关键字了</p> <img src ="http://www.shnenglu.com/horsetail/aggbug/17815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-01-20 13:25 <a href="http://www.shnenglu.com/horsetail/articles/17815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]关于在cin中输入输出空格的实现http://www.shnenglu.com/horsetail/articles/17814.html[HORSETAIL][HORSETAIL]Sat, 20 Jan 2007 05:23:00 GMThttp://www.shnenglu.com/horsetail/articles/17814.htmlhttp://www.shnenglu.com/horsetail/comments/17814.htmlhttp://www.shnenglu.com/horsetail/articles/17814.html#Feedback2http://www.shnenglu.com/horsetail/comments/commentRss/17814.htmlhttp://www.shnenglu.com/horsetail/services/trackbacks/17814.html作者:Horsetail

因ؓstd::cin不能直接接受I格(I格作ؓ输入的标?,所以我们要用cin对象中的一个成员函数std::cin.get()接受单个字符.q可以用std::cout.put()成员函数直接输出.如下:

 #include <iostream>

using namespace std;

int main()
{
  char c;

  while( cin.get())  //接受单个字符(包括I格)
  {
     cout.put();调?/输出单个字符!
  }

  return 1;
}



[HORSETAIL] 2007-01-20 13:23 发表评论
]]>
[原创]函数试块与构造函?/title><link>http://www.shnenglu.com/horsetail/articles/17813.html</link><dc:creator>[HORSETAIL]</dc:creator><author>[HORSETAIL]</author><pubDate>Sat, 20 Jan 2007 05:22:00 GMT</pubDate><guid>http://www.shnenglu.com/horsetail/articles/17813.html</guid><wfw:comment>http://www.shnenglu.com/horsetail/comments/17813.html</wfw:comment><comments>http://www.shnenglu.com/horsetail/articles/17813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/horsetail/comments/commentRss/17813.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/horsetail/services/trackbacks/17813.html</trackback:ping><description><![CDATA[ <p>作者:<font color="#800080">Horsetail</font></p> <p>Z让构造函数能捕获初始化时的异常,我们必须构造函C微函数测试块。可以用函数测试块一lcatch子句与函数联成一个主题。如Q?/p> <p>template <typename T><font color="#ff0000">Hand<T>::Hand(T *p)try:a(0),b(0)</font><font color="#000000">{...}</font></p> <p>catch(int a){....}</p> <img src ="http://www.shnenglu.com/horsetail/aggbug/17813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/horsetail/" target="_blank">[HORSETAIL]</a> 2007-01-20 13:22 <a href="http://www.shnenglu.com/horsetail/articles/17813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]?amp;*”与?&”组合类型的理解判断Ҏhttp://www.shnenglu.com/horsetail/articles/17811.html[HORSETAIL][HORSETAIL]Sat, 20 Jan 2007 05:18:00 GMThttp://www.shnenglu.com/horsetail/articles/17811.htmlhttp://www.shnenglu.com/horsetail/comments/17811.htmlhttp://www.shnenglu.com/horsetail/articles/17811.html#Feedback0http://www.shnenglu.com/horsetail/comments/commentRss/17811.htmlhttp://www.shnenglu.com/horsetail/services/trackbacks/17811.htmlq里我把我本人的理解q程分n?希望对大家有所帮助!

        现在我们先来看看下面q个声明:

void DelDate(date *&timer);

date *&timer q里我们应该是从叛_左理?

&timer  理解成timer是一个引?但是它会是指向一个什么类型的引用?我们接着往下看^v^

 *&timerq里我们可以很轻杄理解到timer是一个指针的引用

按照上面那种我们可以很快知道timer是一个date的指针类型的引用!

...................................

接着,我们来分析下?amp;*?/p>

在“date &*timer”中Q我们可以按照上面的Ҏ分析下?/p>

*timer是个指针Q它指向一个date的引用,可是在C++中指向引用的指针是错误的Q(Q?/p>

所?amp;*是错误的的!

 

==============================

q样理解不知道可以不?希望大家l给意见,好么?



[HORSETAIL] 2007-01-20 13:18 发表评论
]]>
[未知]如何解读复杂指针声明http://www.shnenglu.com/horsetail/articles/17810.html[HORSETAIL][HORSETAIL]Sat, 20 Jan 2007 05:17:00 GMThttp://www.shnenglu.com/horsetail/articles/17810.htmlhttp://www.shnenglu.com/horsetail/comments/17810.htmlhttp://www.shnenglu.com/horsetail/articles/17810.html#Feedback0http://www.shnenglu.com/horsetail/comments/commentRss/17810.htmlhttp://www.shnenglu.com/horsetail/services/trackbacks/17810.html作?未知   

       C语言所有复杂的指针声明Q都是由各种声明嵌套构成的。如何解d杂指针声明呢Q右左法则是一个既著名又常用的Ҏ。不q,叛_法则其实q不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解军_何创建声明的Q而右左法则是用来解决如何辩识一个声明的Q两者可以说是相反的。右左法则的英文原文是这栯的:

The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it. Continue till the whole declaration has been parsed. 


q段英文的翻译如下:

叛_法则Q首先从最里面的圆括号看vQ然后往右看Q再往左看。每当遇到圆括号Ӟ应该掉转阅L向。一旦解析完圆括号里面所有的东西Q就跛_圆括受重复这个过E直到整个声明解析完毕?/p>

        W者要对这个法则进行一个小的修正Q应该是从未定义的标识符开始阅读,而不是从括号读vQ之所以是未定义的标识W,是因Z个声明里面可能有多个标识W,但未定义的标识符只会有一个?/p>

        现在通过一些例子来讨论叛_法则的应用,先从最单的开始,逐步加深Q?/p>

int (*func)(int *p);

首先扑ֈ那个未定义的标识W,是funcQ它的外面有一对圆括号Q而且左边是一?Pq说明func是一个指针,然后跛_q个圆括P先看双Q也是一个圆括号Q这说明(*func)是一个函敎ͼ而func是一个指向这cd数的指针Q就是一个函数指针,q类函数hint*cd的Ş参,q回值类型是int?/p>

int (*func)(int *p, int (*f)(int*));

func被一Ҏ号包含,且左Ҏ一?P说明func是一个指针,跛_括号Q右边也有个括号Q那么func是一个指向函数的指针Q这cd数具有int *和int (*)(int*)q样的Ş参,q回gؓintcd。再来看一看func的Ş参int (*f)(int*)Q类似前面的解释Qf也是一个函数指针,指向的函数具有int*cd的Ş参,q回gؓint?/p>

int (*func[5])(int *p);

func双是一个[]q算W,说明func是一个具?个元素的数组Qfunc的左Ҏ一?Q说明func的元素是指针Q要注意q里?不是修饰func的,而是修饰func[5]的,原因是[]q算W优先?高,func先跟[]l合Q因?修饰的是func[5]。蟩个括P看右边,也是一对圆括号Q说明func数组的元素是函数cd的指针,它所指向的函数具有int*cd的Ş参,q回值类型ؓint?/p>


int (*(*func)[5])(int *p);

func被一个圆括号包含Q左边又有一?Q那么func是一个指针,跛_括号Q右Ҏ一个[]q算W号Q说明func是一个指向数l的指针Q现在往左看Q左Ҏ一?P说明q个数组的元素是指针Q再跛_括号Q右边又有一个括P说明q个数组的元素是指向函数的指针。ȝ一下,是Qfunc是一个指向数l的指针Q这个数l的元素是函数指针,q些指针指向hint*形参Q返回gؓintcd的函数?/p>

int (*(*func)(int *p))[5];

func是一个函数指针,q类函数hint*cd的Ş参,q回值是指向数组的指针,所指向的数l的元素是具?个int元素的数l?/p>

要注意有些复杂指针声明是非法的,例如Q?/p>

int func(void) [5];

func是一个返回gؓh5个int元素的数l的函数。但C语言的函数返回g能ؓ数组Q这是因为如果允许函数返回gؓ数组Q那么接收这个数l的内容的东西,也必L一个数l,但C语言的数l名是一个右|它不能作为左值来接收另一个数l,因此函数q回g能ؓ数组?/p>

int func[5](void);

func是一个具?个元素的数组Q这个数l的元素都是函数。这也是非法的,因ؓ数组的元素除了类型必M样外Q每个元素所占用的内存空间也必须相同Q显然函数是无法辑ֈq个要求的,即函数的类型一P但函数所占用的空间通常是不相同的?/p>

作ؓl习Q下面列几个复杂指针声明l读者自己来解析Q答案放在第十章里?/p>

int (*(*func)[5][6])[7][8];

int (*(*(*func)(int *))[5])(int *);

int (*(*func[7][8][9])(int*))[5];

        实际当中Q需要声明一个复杂指针时Q如果把整个声明写成上面所C的形式Q对E序可读性是一大损実뀂应该用typedef来对声明逐层分解Q增强可L,例如对于声明Q?/p>

int (*(*func)(int *p))[5];

可以q样分解Q?/p>

typedef  int (*PARA)[5];
typedef PARA (*func)(int *);

q样容易看得多了?/p>

[HORSETAIL] 2007-01-20 13:17 发表评论
]]>
91Ʒ91þþþþ| һþƵ| þþƷƷapp| ޾Ʒһþ| ޾ƷþרӰҵ| þrоƷƵ| ŷ˾þۺ | ŷҹƷþþþ | þþƷһĻ| ŷ޾þav| þþž޾Ʒ| ۺϾþþƷɫ| ƷVAþþþþþñ| þŮվ| ޾ƷþþþþͼƬ | þþWWW˳ɾƷ| ŷ糱þþXXXXx| ƷŮþþþavˬ| ɫۺϾþ| þۺϸۺϾþ| ϼþùƷӰԺ| ޾Ʒþ| ޹һɾþþƷۺ | ݺɫþþۺƵպ | þþþþþĻ | þۺ97ɫֱ| ˾Ʒþö| ھƷþþþþþþõӰ| þ99Ʒ99þ6| þþþƷһ| 뾫Ʒþþþþ| һaƬþëƬ| ƷŮþþ| Ʒ999þþþþĻ| þۺϸϾþúݺݺ97ɫ| Ļþһ| þAVԴվ| þˬ˸߳AV | ޹ŷۺ997þ| þAVĻ| ͵þþþƷר|