BBS水木清华站∶精华区

 
 
       战   斗   世   家   C 语言讲座                  #1 
 
                                 作者: Lgw Lu 
                                 E-Mail: lgwlu@ms1.hinet.net 
--------------------------------------------------------------- 
 
                   < 宣告的重要性 > 
 
前言: 
 
     小弟用 C 语言 3 年了,虽然功力普通,不过因为发表欲强烈,加上 
  对 C 极度喜爱,因此不自量力的想在网路上发表一些个人经验及技巧 
  ,也许这些内容在高手眼里不算什麽,但我相信总会有需要的人,可以 
  学到一些观念或技术的,这就是我的希望!! 
 
     本讲座并非教授一般 C 语言程式设计,毕竟这些东东在世面上已 
  有很多书籍可供参考。在这里主要是讲些平常比较不注意到的事,或是 
  一些设计技巧,也许是一些产品介绍,也许是...... 总之,这是一个大 
  杂锅,各种东东都有,希望各位会喜欢. 
 
     一般情况,本讲座都会以类似这些格式发表,因为这是第一篇,所以 
  废话多了点。 :> 
 
     基本是一周发一篇,若太久没发,记得来信骂骂我! :_| 
 
内文: 
 
     a()                int b(void) 
     {                   { 
     /* 程式 */          /* 程式 */ 
     }                   } 
 
     很多人都知道这两种宣告都是相同的,但是 b 函式才是一个好的 
  宣告法,为什麽呢?! 
 
     因为你知道,但 Compiler 不知道!!   <=== 重点 
 
     b 的宣告可以让 Compiler 自动检查型态是否错误,以免明明是不 
  需传参数,但却传了,有些检查较不严格的 Compiler,可能会允许你 
  a(x) 结果却成功!! But 这是错的!! 
 
     另外 const 也是一个好用的 KeyWord,它可以让你对某变数只读 
  但不能改。也许有人会说这作用不大嘛!!其实作用大多了,至少有两种 
  作用: 
 
     (1) 最佳化 
 
     Ex1:                            Ex2: 
 
     char str1[]="TEST";           const char str1[]="TEST"; 
     char str2[]="TEST";           const char str2[]="TEST"; 
 
     如果在程式中这两个字串都不改,那 Ex1 会在 Memory 中有两份 
  "TEST",而 Ex2 却只有一份!! 
 
     (2) 不易出错 
 
     Ex1:                         Ex2: 
 
     int a(struct TEST *s)        int a(const struct TEST *s) 
      {                             { 
 
      {                             { 
      /* .... */                    /* ...... */ 
      }                             } 
 
     如果 a 这函式,只是想用此 struct 来做处理,而不想修改此 
  struct 资料。如果用 Ex2 方式的话,不小心改到,则 Compiler 会给 
  你错误讯息,但 Ex1 却不会!! (Call by Address) 
 
     由以上两点,你应该知道 const 的好处了吧!! 
  (如果没好处 ANSI C 也不会加入此 KeyWord,但 K&R C 却无...) 
 
     以後写程式不要再偷懒,因为你懒,Compiler 也跟你一起懒!! 
                                    (它不帮你检查型别) 
 
预告: 
     下篇将简单介绍 K&R C 和 ANSI C 的不同,并让你知道 ANSI C 
  比 K&R C 好在哪!!  < K&R C vs ANSI C > 
 
--------------------------------------------------------------- 
 
                  <<< 本文版权属於作者 >>> 
     本文章可自由引用,拷贝,传阅,但需保持本文章之完整性,从标题 
  到最後版权宣告,且不能用来做商业用途!! 
 
     若有任何问题,或是错误之处,欢迎来信批评指教!! 谢谢!! 

BBS水木清华站∶精华区