??xml version="1.0" encoding="utf-8" standalone="yes"?>国产专区一区二区三区,国产成人a亚洲精品,国产在线一在线二http://www.aygfsteel.com/hjh132/category/30119.htmlIf a thing is worth doing it is worth doing well.zh-cnMon, 24 Mar 2008 22:44:35 GMTMon, 24 Mar 2008 22:44:35 GMT60含参数的宏与函数的区?/title><link>http://www.aygfsteel.com/hjh132/archive/2008/03/24/188206.html</link><dc:creator>101℃太?/dc:creator><author>101℃太?/author><pubDate>Mon, 24 Mar 2008 04:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/hjh132/archive/2008/03/24/188206.html</guid><wfw:comment>http://www.aygfsteel.com/hjh132/comments/188206.html</wfw:comment><comments>http://www.aygfsteel.com/hjh132/archive/2008/03/24/188206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hjh132/comments/commentRss/188206.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hjh132/services/trackbacks/188206.html</trackback:ping><description><![CDATA[<p style="background: white; margin: 0cm 0cm 0pt; line-height: 180%; text-align: left" align="left"><span style="font-size: 12pt; color: #666666; line-height: 180%; font-family: 宋体">1.</span><span style="color: #666666; line-height: 180%; font-family: 宋体"><span style="font-size: 12pt">函数调用Ӟ先求出实参表辑ּ的|然后带入形参。而用带参的宏只是进行简单的字符替换?/span><br /> <span style="font-size: 12pt">2.</span><span style="font-size: 12pt">函数调用是在E序q行时处理的Q分配(f)时的内存单元Q而宏展开则是在编译时q行的,在展开时ƈ不分配内存单元,不进行值的传递处理,也没?#8220;q回?#8221;的概c?/span><br /> <span style="font-size: 12pt">3.</span><span style="font-size: 12pt">对函C的实参和形参都要定义cdQ二者的cd要求一_(d)如不一_(d)应进行类型{换;而宏不存在类型问题,宏名无类型,它的参数也无cdQ只是一个符号代表,展开时带入指定的字符卛_。宏定义Ӟ字符串可以是Mcd的数据?/span><br /> <span style="font-size: 12pt">4.</span><span style="font-size: 12pt">调用函数只可得到一个返回|而用宏可以设法得到几个结果?/span><br /> <span style="font-size: 12pt">5.</span><span style="font-size: 12pt">使用宏次数多Ӟ宏展开后源E序长,因ؓ(f)每展开一ơ都使程序增长,而函数调用不使源E序变长?/span><br /> <span style="font-size: 12pt">6.</span><span style="font-size: 12pt">宏替换不占运行时_(d)只占~译旉Q而函数调用则占运行时_(d)分配单元、保留现场、g递、返回)?/span></span></p> <p style="background: white; margin: 0cm 0cm 0pt; line-height: 180%; text-align: left" align="left"><span style="font-size: 12pt; color: #666666; line-height: 180%; font-family: 宋体">一般来_(d)用宏来代表简短的表达式比较合适?/span></p> <p style="background: white; margin: 0cm 0cm 0pt; line-height: 180%; text-align: left" align="left"><span style="font-size: 12pt; color: #666666; line-height: 180%; font-family: 宋体">有时使用宏时?x)引L(fng)解错误:(x)</span></p> <p style="background: white; margin: 0cm 0cm 0pt; line-height: 180%; text-align: left" align="left"><span style="font-size: 12pt; color: #666666; line-height: 180%; font-family: 宋体">例:(x)</span></p> <p style="background: white; margin: 0cm 0cm 0pt; line-height: 180%; text-align: left" align="left"><span style="font-size: 12pt; color: #666666; line-height: 180%; font-family: 宋体">Qinclude<iostream.h><br /> #define max(a,b) ((a>b)?a:b)<br /> void main()<br /> {<br />  int i=3,j=2;<br />  cout<<max(++i,j)<<endl;<br />  cout<<i<<"  "<<j<<endl;<br /> }</span></p> <p style="background: white; margin: 0cm 0cm 0pt; line-height: 180%; text-align: left" align="left"><span style="font-size: 12pt; color: #666666; line-height: 180%; font-family: 宋体">q行l果Q?/span></p> <p style="background: white; margin: 0cm 0cm 0pt; line-height: 180%; text-align: left" align="left"><span style="font-size: 12pt; color: #666666; line-height: 180%; font-family: 宋体">5</span></p> <p style="background: white; margin: 0cm 0cm 0pt; line-height: 180%; text-align: left" align="left"><span style="font-size: 12pt; color: #666666; line-height: 180%; font-family: 宋体">5  2</span></p> <img src ="http://www.aygfsteel.com/hjh132/aggbug/188206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hjh132/" target="_blank">101℃太?/a> 2008-03-24 12:21 <a href="http://www.aygfsteel.com/hjh132/archive/2008/03/24/188206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C struct 中字节对齐问?/title><link>http://www.aygfsteel.com/hjh132/archive/2008/03/17/186849.html</link><dc:creator>101℃太?/dc:creator><author>101℃太?/author><pubDate>Mon, 17 Mar 2008 12:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/hjh132/archive/2008/03/17/186849.html</guid><wfw:comment>http://www.aygfsteel.com/hjh132/comments/186849.html</wfw:comment><comments>http://www.aygfsteel.com/hjh132/archive/2008/03/17/186849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hjh132/comments/commentRss/186849.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hjh132/services/trackbacks/186849.html</trackback:ping><description><![CDATA[VC中下面几个结构体大小分别是多呢<br /> struct MyStruct <br /> { <br />     double m4; <br />     char m1; <br />     int  m3Q?<br /> }; <br /> struct MyStruct { <br />     char m1; <br />     double m4; <br /> ?nbsp;   int m3; <br /> }; <br /> #pragma pack(push)//保存寚w状?<br /> #pragma pack(16)  //讄?6字节寚w<br /> struct test <br /> { <br />    char m1; <br />    int m3;  <br />    double m4;     <br /> }; <br /> #pragma pack(pop)//恢复寚w状?<br /> 如果你的{案不是16Q?4?6Q相信下面的内容对你很有帮助?br /> 1?sizeof应用在结构上的情?<br /> L(fng)下面的结构:(x) <br /> struct MyStruct <br /> { <br /> double dda1; <br /> char dda; <br /> int type <br /> }; <br /> 对结构MyStruct采用sizeof?x)出C么结果呢Qsizeof(MyStruct)为多呢Q也怽<br /> ?x)这hQ?<br /> sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13 <br /> 但是当在VC中测试上面结构的大小Ӟ你会(x)发现sizeof(MyStruct)?6。你知道Z<br /> 么在VC中会(x)得出q样一个结果吗Q?<br /> 其实Q这是VC对变量存储的一个特D处理?span style="color: red; background-color: yellow">Z提高CPU的存储速度QVC对一些变量的<br /> 起始地址做了“寚w”处理?/span>在默认情况下QVC规定各成员变量存攄起始地址相对于结<br /> 构的起始地址的偏U量必须变量的类型所占用的字节数的倍数。下面列出常用类型的<br /> 寚w方式(vc6.0,32位系l??br /> cd      寚w方式Q变量存攄起始地址相对于结构的起始地址的偏U量Q?<br /> Char      偏移量必Mؓ(f)sizeof(char)?的倍数 <br /> Short     偏移量必Mؓ(f)sizeof(short)?的倍数 <br /> int   偏移量必Mؓ(f)sizeof(int)?的倍数 <br /> float 偏移量必Mؓ(f)sizeof(float)?的倍数 <br /> double ?偏移量必Mؓ(f)sizeof(double)?的倍数 <br /> 各成员变量在存放的时候根据在l构中出现的序依次甌I间Q同时按照上面的?br /> 齐方式调整位|,I缺的字节VC?x)自动填充。同时VCZ保l构的大ؓ(f)l构的字节边<br /> 界数Q即该结构中占用最大空间的cd所占用的字节数Q的倍数Q所以在为最后一个成?br /> 变量甌I间后,q会(x)Ҏ(gu)需要自动填充空~的字节?<br /> 下面用前面的例子来说明VC到底怎么h存放l构的?<br /> struct MyStruct <br /> { <br /> double dda1; <br /> char dda; <br /> int type <br /> }Q?<br /> Z面的l构分配I间的时候,VCҎ(gu)成员变量出现的顺序和寚w方式Q先为第一?br /> 成员dda1分配I间Q其起始地址跟结构的起始地址相同Q刚好偏U量0刚好为sizeof(doub<br /> le)的倍数Q,该成员变量占用sizeof(double)=8个字节;接下来ؓ(f)W二个成员dda分配I?br /> _(d)q时下一个可以分配的地址对于l构的v始地址的偏U量?Q是sizeof(char)的倍数<br /> Q所以把dda存放在偏U量?的地Ҏ(gu)_齐方式,该成员变量占?sizeof(char)=1个字<br /> 节;接下来ؓ(f)W三个成员type分配I间Q这时下一个可以分配的地址对于l构的v始地址<br /> 的偏U量?Q不是sizeof (int)=4的倍数Qؓ(f)了满_齐方式对偏移量的U束问题QVC?br /> 动填?个字节(q三个字节没有放什么东西)Q这时下一个可以分配的地址对于l构的v<br /> 始地址的偏U量?2Q刚好是sizeof(int)=4的倍数Q所以把type存放在偏U量?2的地?br /> Q该成员变量占用sizeof(int)=4个字节;q时整个l构的成员变量已l都分配了空_(d)?br /> 的占用的I间大小为:(x)8+1+3+4=16Q刚好ؓ(f)l构的字节边界数Q即l构中占用最大空间的<br /> cd所占用的字节数sizeof(double)=8Q的倍数Q所以没有空~的字节需要填充。所以整<br /> 个结构的大小为:(x)sizeof(MyStruct)=8+1+ 3+4=16Q其中有3个字节是VC自动填充的,没有<br /> 放Q何有意义的东ѝ?<br /> 下面再D个例子,交换一下上面的MyStruct的成员变量的位置Q它变成下面的情况<br /> Q?<br /> struct MyStruct <br /> { <br /> char dda; <br /> double dda1; <br /> int type <br /> }Q?<br /> q个l构占用的空间ؓ(f)多大呢?在VC6.0环境下,可以得到sizeof(MyStruc)?4。结<br /> 合上面提到的分配I间的一些原则,分析下VC怎么样ؓ(f)上面的结构分配空间的。(单说<br /> 明) <br /> struct MyStruct <br /> { <br />  char dda;//偏移量ؓ(f)0Q满_齐方式,dda占用1个字节; <br /> double dda1;//下一个可用的地址的偏U量?Q不是sizeof(double)=8 <br />  //的倍数Q需要补?个字节才能偏移量变?Q满_?<br />  //方式Q,因此VC自动填充7个字节,dda1存放在偏U量? <br />  //的地址上,它占?个字节?<br /> int typeQ?/下一个可用的地址的偏U量?6Q是sizeof(int)=4的?<br />  //敎ͼ满int的对齐方式,所以不需要VC自动填充Qtype?<br />  //攑֜偏移量ؓ(f)16的地址上,它占?个字节?<br /> }Q?/所有成员变量都分配了空_(d)I间ȝ大小?+7+8+4=20Q不是结?<br />  //的节边界敎ͼ即结构中占用最大空间的cd所占用的字节数sizeof <br />  //(double)=8Q的倍数Q所以需要填?个字节,以满结构的大小?<br />  //sizeof(double)=8的倍数?<br /> 所以该l构ȝ大小为:(x)sizeof(MyStruc)?+7+8+4+4=24。其中ȝ?+4=11个字?br /> 是VC自动填充的,没有放Q何有意义的东ѝ?br /> VC对结构的存储的特D处理确实提高CPU存储变量的速度Q但是有时候也带来了一些麻<br /> 烦,我们也屏蔽掉变量默认的对齐方式,自己可以讑֮变量的对齐方式?br /> VC 中提供了#pragma pack(n)来设定变量以n字节寚w方式。n字节寚w是说变量存<br /> 攄起始地址的偏U量有两U情况:(x)W一、如果n大于{于该变量所占用的字节数Q那么偏<br /> U量必须满默认的对齐方式,W二、如果n于该变量的cd所占用的字节数Q那么偏U?br /> 量ؓ(f)n的倍数Q不用满默认的寚w方式。结构的d也有个U束条gQ分下面两种情况<br /> Q如果n大于所有成员变量类型所占用的字节数Q那么结构的d必Mؓ(f)占用I间最大的<br /> 变量占用的空间数的倍数Q?<br /> <br /> 否则必须为n的倍数。下面D例说明其用法?<br /> #pragma pack(push) //保存寚w状?<br /> #pragma pack(4)//讑֮?字节寚w <br /> struct test <br /> { <br />  char m1; <br />  double m4; <br />  int m3; <br /> }; <br /> #pragma pack(pop)//恢复寚w状?<br /> 以上l构的大ؓ(f)16Q下面分析其存储情况Q首先ؓ(f)m1分配I间Q其偏移量ؓ(f)0Q满?br /> 我们自己讑֮的对齐方式(4字节寚wQ,m1占用1个字节。接着开始ؓ(f) m4分配I间Q这?br /> 其偏U量?Q需要补?个字节,q样使偏U量满为n=4的倍数Q因为sizeof(double)?br /> 于nQ?m4占用8个字节。接着为m3分配I间Q这时其偏移量ؓ(f)12Q满ؓ(f)4的倍数Qm3占用<br /> 4个字节。这时已lؓ(f)所有成员变量分配了I间Q共分配?6个字节,满为n的倍数。如<br /> 果把上面?pragma pack(4)改ؓ(f)#pragma pack(16)Q那么我们可以得到结构的大小?4?br /> Q请读者自己分析) <br /> <br /> 2?sizeof用法ȝ <br /> <br /> 在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面?br /> 参数对sizeof的用法做个ȝ?<br /> AQ?参数为数据类型或者ؓ(f)一般变量。例如sizeof(int),sizeof(long){等。这U情<br /> 况要注意的是不同pȝpȝ或者不同编译器得到的结果可能是不同的。例如intcd?6?br /> pȝ中占2个字节,?2位系l中?个字节?<br /> BQ?参数为数l或指针。下面D例说? <br /> int a[50]; //sizeof(a)=4*50=200; 求数l所占的I间大小 <br /> int *a=new int[50];// sizeof(a)=4; aZ个指针,sizeof(a)是求指针 <br />  //的大??2位系l中Q当然是?个字节?<br /> CQ?参数为结构或cRSizeof应用在类和结构的处理情况是相同的。但有两炚w要注<br /> 意,W一、结构或者类中的静态成员不对结构或者类的大生媄响,因ؓ(f)静态变量的?br /> 储位|与l构或者类的实例地址无关?<br /> W二、没有成员变量的l构或类的大ؓ(f)1Q因为必M证结构或cȝ每一 <br /> 个实例在内存中都有唯一的地址?<br /> 下面举例说明Q?<br /> Class Test{int a;static double c};//sizeof(Test)=4. <br /> Test *s;//sizeof(s)=4,sZ个指针?<br /> Class test1{ };//sizeof(test1)=1; <br /> DQ?参数为其他。下面D例说明?<br />  int func(char s[5]); <br />  { <br />  cout< //数的参数在传递的时候系l处理ؓ(f)一个指针,所 <br />  //以sizeof(s)实际上ؓ(f)求指针的大小?<br />  return 1; <br /> } <br /> sizeof(func(“1234”))=4//因ؓ(f)func的返回类型ؓ(f)intQ所以相当于 <br />  //求sizeof(int). <br /> 以上为sizeof的基本用法,在实际的使用中要注意分析VC的分配变量的分配{略Q这<br /> L(fng)话可以避免一些错? <img src ="http://www.aygfsteel.com/hjh132/aggbug/186849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hjh132/" target="_blank">101℃太?/a> 2008-03-17 20:26 <a href="http://www.aygfsteel.com/hjh132/archive/2008/03/17/186849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">Ǧɽ</a>| <a href="http://" target="_blank">ξ</a>| <a href="http://" target="_blank">麣</a>| <a href="http://" target="_blank">γ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ؼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">е</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ҫ</a>| <a href="http://" target="_blank">ƾ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˿</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">ʯȪ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank">̶</a>| <a href="http://" target="_blank">ʼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ݳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>