Linux 版 (精华区)

发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标  题: ◇ 之二 -- K&R C vs ANSI C
发信站: 紫 丁 香 (Sun Nov 15 21:50:56 1998), 转信


寄信人: guest.bbs@hgluo.hust.edu.cn 
标  题: ◇ 之二 -- K&R C vs ANSI C
发信站: 华南理工大学 BBS木棉站
日  期: Thu Feb 20 14:30:24 1997

       战   斗   世   家   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 语言最强之指标运用!!  < 指标 - 强强强 >

---------------------------------------------------------------

                  <<< 本文版权属於作者 >>>
     本文章可自由引用,拷贝,传阅,但需保持本文章之完整性,从标题
  到最後版权宣告,且不能用来做商业用途!!

     若有任何问题,或是错误之处,欢迎来信批评指教!! 谢谢!!




--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.220毫秒