BBS水木清华站∶精华区

 
 
       战   斗   世   家   C 语言讲座                  #2 
 
                                 作者: Lgw Lu 
                                 E-Mail: lgwlu@ms1.hinet.net 
--------------------------------------------------------------- 
 
                   < K&R C vs ANSI C > 
 
前言: 
 
     西元 1978 年,K&R 出了 The C Programming Language 之後, 
  C 语言 - 红了!! 从 UNIX 移植到各个平台,从此越来越多人用 C, 
  但因为电脑科技进步神速,使得各家 Compiler 做的越来越不同. 
 
     西元 1983 年 ANSI 成立了 C 语言委员会,目的是要制定一套可 
  遵循的 C 语言标准. 
 
内文: 
 
     在此我们不研究历史,我们来看看 ANSI 多了啥,有啥好用的!! 
  (请注意!目前市面上的 C Compiler 大都支援 ANSI 及 K&R 格式) 
 
     .............. 
     ........ 
     说实在的,ANSI 要说完,可能篇幅....... 超级大!! 
  所以我指出一些重要的,其他的,如果有机会再说了!! 
 
  (1) 型别转换 
 
  Ex: 
     K&R C 写法                    ANSI C 写法 
 
     /* FILE 1 */ 
 
     float a(float,float); 
     main() 
      {                              同左 
       float x=1.2 , y=2.3; 
 
       printf("%f\n",a(x,y)); 
      } 
 
     /* FILE 2 */ 
 
     float a(x,y)                   float a(float x,float y) 
     float x,y;                        { 
       {                               return (x+y); 
       return (x+y);                   } 
       } 
 
     大家一定以为这两种写法的结果相同,其实不然!! K&R C 写法的 
  结果是错的!! 哇!! 相信有些用这种写法的人一定会觉得-怎麽可能 
  ???? 我说明一下,当然你可以试试看!! 
 
     原因是型别转换不同(详细资料请自行查书),K&R C 会在运算前, 
  将 float 转成 double,但因传回是 float,so 资料就失掉准度, 
  因此结果是错的!!还有 K&R C 的写法 Compiler 无法帮你做型别检 
  查,容易造成传错型别参数而不自知!! 
 
     所以 ANSI C 的委员,都建议不要使用此种写法,当然目前都还是 
  支援此写法,用 K&R C 写法的人,自己要小心,以免错了而不知错 
  在哪的情形发生!! 
 
  (2) 资料型别 
 
     ANSI C 增加了 signed 及 unsigned ,还有 wchar_t ,在这介绍 
  一下 wchar_t!! 
 
     wchar_t : 宽文字,也就是双字元组. 
 
  这表示 ANSI C 对亚洲也有顾虑到呦!!用法: 
 
     char str[]="战斗世家"; 
 
  以前这样写,如果想取出其中一字,怎办?!只好分两次 ...... 唉!! 
  但如果这样写 
 
     #include <stddef.h> 
 
     wchar_t str[]=L"战斗世家"; 
 
  (前面 L 是常数前导,设初值最好加一下,作用同 long x=6000000L; 
   主要是让 Compiler 确定此型别,毕竟每家 Compiler 都不同嘛!!) 
 
  那就容易多了,如 "世" 字,就是  str[2];....... 多容易!! 
 
     这真的很方便,但还是有人写程式不用, 例如 Windows 下的软体 
  常常都不能用中文,也许对亚洲市场没兴趣吧!! 
 
     K&R C vs ANSI C 暂时写到这,还有其他的东东,慢慢後续都会讲 
  到,记得继续看下去呦!! 
 
     清楚两种写法不同之处了吧!! 建议 - 用 ANSI C 写法吧!! 
 
预告: 
     下篇将介绍 C 语言最强之指标运用!!  < 指标 - 强强强 > 
 
--------------------------------------------------------------- 
 
                  <<< 本文版权属於作者 >>> 
     本文章可自由引用,拷贝,传阅,但需保持本文章之完整性,从标题 
  到最後版权宣告,且不能用来做商业用途!! 
 
     若有任何问题,或是错误之处,欢迎来信批评指教!! 谢谢!! 
 
 
 
 

BBS水木清华站∶精华区