⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000003.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;<A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw.">ax.bbs@bbs.ee.nthu.edu.tw.</A>&nbsp;(athena),&nbsp;信区:&nbsp;test&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;星星流讲座&nbsp;0039&nbsp;<BR>发信站:&nbsp;☆清华电机☆&nbsp;(Thu&nbsp;Jul&nbsp;13&nbsp;19:31:40&nbsp;1995)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>第&nbsp;6&nbsp;讲&nbsp;之&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;常数与定字&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Topic:&nbsp;Constants&nbsp;and&nbsp;Literal&nbsp;<BR>&nbsp;<BR>什麽叫做常数&nbsp;(constant)&nbsp;呢?相对於变数是可变动的资料而言,常数就是&nbsp;<BR>不会变动的资料。例如圆周率π就是常见的数学常数。&nbsp;<BR>&nbsp;<BR>定义常数的方法有两种:&nbsp;<BR>&nbsp;<BR>第一种方法是使用&nbsp;#define&nbsp;叙述,例如:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;Pi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1415926&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;BELL&nbsp;&nbsp;&nbsp;&nbsp;'\007'&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Hello,&nbsp;world\n&quot;&nbsp;<BR>&nbsp;<BR>我们前面提到过,以&nbsp;#&nbsp;开头的命令叫做编译指示&nbsp;(compiler&nbsp;directives),&nbsp;<BR>所以&nbsp;#define&nbsp;也是一种编译指示。由我们上面的例子中可以看到常数不限任&nbsp;<BR>何资料型态都可以是常数,你可以定义常数的数值、字元或字串。&nbsp;<BR>&nbsp;<BR>第二种方法是使用&nbsp;const&nbsp;修饰子,例如:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;double&nbsp;Pi&nbsp;=&nbsp;3.1415926;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;char&nbsp;BELL&nbsp;=&nbsp;'\007';&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;char&nbsp;str[]&nbsp;=&nbsp;&quot;Hello,&nbsp;world\n&quot;;&nbsp;<BR>&nbsp;<BR>我们可以看到&nbsp;str&nbsp;这个字元阵列的元素数目并未给定,这是因为若是&nbsp;compiler&nbsp;<BR>在编译时就可以算出这个阵列的大小,那我们就可以省略阵列的元素个数。&nbsp;<BR>以&nbsp;const&nbsp;宣告的数,通常是在宣告时同时给定初值,之後所有对这个数的更&nbsp;<BR>动均视为错误。&nbsp;<BR>&nbsp;<BR>应用常数最常见的问题有三个:第一个是到底要用&nbsp;#define&nbsp;或是&nbsp;const?&nbsp;<BR>第二个是&nbsp;const&nbsp;string&nbsp;(literal)&nbsp;的设定,第三个是若是函数参数为常数&nbsp;<BR>型态的指标又如何?&nbsp;<BR>&nbsp;<BR>我们先来解决第一个问题:到底要用&nbsp;#define&nbsp;或是&nbsp;const?&nbsp;<BR>&nbsp;<BR>答案是用&nbsp;const。为什麽?理由是因为使用&nbsp;const&nbsp;的话,compiler&nbsp;才能&nbsp;<BR>防止错误地使用常数。我们说过&nbsp;#define&nbsp;是一种编译指示,而编译指示是&nbsp;<BR>以下图的方式被处理的:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;原始码&nbsp;(source&nbsp;code)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↓&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;+&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;前置处理程式&nbsp;(preprocessor)&nbsp;|&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↓&nbsp;扩张後的码&nbsp;&nbsp;|&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;编译程式&nbsp;(compiler)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;最佳化程式&nbsp;(optimizer)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;+&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↓&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中间码&nbsp;(intermediate&nbsp;code)&nbsp;<BR>&nbsp;<BR>原始码由前置处理程式处理之後,变成扩张後的码&nbsp;(expanded&nbsp;source),&nbsp;<BR>然後才丢给&nbsp;compiler&nbsp;去编译。前置处理程式是&nbsp;cpp&nbsp;(C&nbsp;PreProcessor),&nbsp;<BR>它也是由&nbsp;gcc&nbsp;偷偷地去呼叫的。前置处理程式会把所有的&nbsp;#define&nbsp;所产生&nbsp;<BR>的常数直接代换进数值,也就是说像&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;%f\n&quot;,&nbsp;Pi);&nbsp;<BR>&nbsp;<BR>这一行叙述,经过&nbsp;cpp&nbsp;处理之後就会变成&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;%f\n&quot;,&nbsp;3.1415926);&nbsp;<BR>&nbsp;<BR>这有什麽缺点呢?第一,cpp&nbsp;并不会替你检查型态是否正确。第二,compiler&nbsp;<BR>根本看不到&nbsp;Pi&nbsp;这个符号&nbsp;(因为被代换掉了),所以&nbsp;compiler&nbsp;产生出来的除&nbsp;<BR>错资料也没有&nbsp;Pi&nbsp;这个符号,因此你若使用除错器来替你的程式侦错,也看不&nbsp;<BR>到&nbsp;Pi&nbsp;这个符号,那意味著除错变的非常地麻烦。所以尽量使用&nbsp;const&nbsp;来代&nbsp;<BR>替&nbsp;#define。&nbsp;<BR>&nbsp;<BR>第二个和第三个问题,留待下讲再叙。&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>本文原作者为徐振家,原作刊载於星星神教总坛&nbsp;☆清华电机☆&nbsp;test&nbsp;板。&nbsp;<BR>你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。&nbsp;<BR>原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。&nbsp;<BR>未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。&nbsp;<BR>其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。&nbsp;<BR>对本文有任何疑问或意见请&nbsp;mail&nbsp;给&nbsp;<A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw,谢谢。">ax.bbs@bbs.ee.nthu.edu.tw,谢谢。</A>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -