﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-boxun^小站^-随笔分类-程序设计</title><link>http://www.cnitblog.com/boxun/category/6712.html</link><description>重要的是，要有勇气跟着你的心意和直觉走，它们知道你到底想要什么，其他事情都是次要的!</description><language>zh-cn</language><lastBuildDate>Fri, 30 Sep 2011 15:31:46 GMT</lastBuildDate><pubDate>Fri, 30 Sep 2011 15:31:46 GMT</pubDate><ttl>60</ttl><item><title>static使用小结</title><link>http://www.cnitblog.com/boxun/archive/2007/12/26/38146.html</link><dc:creator>boxun</dc:creator><author>boxun</author><pubDate>Wed, 26 Dec 2007 12:37:00 GMT</pubDate><guid>http://www.cnitblog.com/boxun/archive/2007/12/26/38146.html</guid><wfw:comment>http://www.cnitblog.com/boxun/comments/38146.html</wfw:comment><comments>http://www.cnitblog.com/boxun/archive/2007/12/26/38146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/boxun/comments/commentRss/38146.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/boxun/services/trackbacks/38146.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">在用</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">c</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">语言进行系统软件设计时经常会用到</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">，若使用不慎会造成对一些变量的访问受到限制，下面对其使用做一个小结：</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><br><br></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">全局变量</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">(</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">外部变量</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">)</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">的说明之前再冠以</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">就构成了静态的全局变量。全局变量本身就是静态存储方式，</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">静态全局变量当然也是静态存储方式。</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序，</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">当一个源程序由多个源文件组成时，非静态的全局变量在各个源文件中都是有效的。</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">而静态全局变量则限制了其作用域，</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">即只在定义该变量的源文件内有效，</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内，只能为该源文件内的函数公用，</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">因此可以避免在其它源文件中引起错误。</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><br><br></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">　　从以上分析可以看出，</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域，</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"> </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">限制了它的使用范围。</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><br><br></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">　　</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">(static)</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">，内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数，应该在一个头文件中说明，要使用这些函数的源文件要包含这个头文件</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><br><br></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">　　</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">全局变量与普通的全局变量有什么区别：</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">全局变量只初使化一次，防止在其他文件单元中被引用</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">;<br></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">　　</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">局部变量和普通局部变量有什么区别：</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">局部变量只被初始化一次，下一次依据上一次结果值；</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><br></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">　　</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">函数与普通函数有什么区别：</span><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'">static</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana">函数在内存中只有一份，普通函数在每个被调用中维持一份拷贝。</span></p>
<img src ="http://www.cnitblog.com/boxun/aggbug/38146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/boxun/" target="_blank">boxun</a> 2007-12-26 20:37 <a href="http://www.cnitblog.com/boxun/archive/2007/12/26/38146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>