C专家编程 第1章 C:穿越时空的迷雾 1.8 ANSI C标准的结构

发布于:2023-02-03 ⋅ 阅读:(248) ⋅ 点赞:(0)

     /usr/group是一个于1984年成立的UNIX国际用户小组。1989年,它更名为UniForum, 现在是一个非盈利行业协会,其宗旨是完善UNIX操作系统。 
    Uniforum从行为的角度对UNIX进行了成功的定义,这激励了许多有创造性的想法,包括:X/Open的可移植性指导方针(第4版,XPG/4出现于1992年12月)、 IEEE的POSIX1003、 System V Interface Definition(系统5接口定义)、 ANSI C标准函数库。

    软件信条
    标准设立后轻易不作变动,即使是修改错误。

    K&R C 和 ANSI C之间的区别
    1.第一类区别是指一些新的,非常不同并且很重要的东西。唯一属于这类区别的特性是原型---把形参的类型作为函数声明的一部分。原型使得编译器很容易根据函数的定义来检查函数的用法。 
    2.第二类区别是一些新的关键字。ANSI C正式添加了一些关键字:enum代表枚举;const,volatile,signed,void。 
    3.第三类区别被称为“安静的改变”---原先的某些语言特性仍然合法,但意思有了一些轻微的改变。有一条新规则,就是相邻的字符串字面值会被自动连接在一起。
    4.最后一类区别就是除了上面3类之外的所有区别,包括哪些在语言的标准化过程中长期争论的东西。这些区别在现实生活几乎不可能碰到,如符号粘贴和三字母词(trigraph)。

    ANSI C中最重要的新特性就是“原型”,这种特性取自C++。原型是函数声明的扩展,这样不仅函数名和返回类型已知,而且所有的形参类型也是已知的。这就允许编译器在参数的使用和声明之间检查一致性。它应该称作“函数签名”(function signiture),或者像Ada那样称作“函数说明”(function specification)。 

    软件信条
    函数签名(function signiture)
    函数说明(function specification)

    原型的目的是当我们对函数做前向声明(forward declaration)编译器因此能够在编译时刻对函数调用中的实参和函数声明中的形参进行一致性检查。在K&R C中这种检查被推迟到链接时,或者干脆不检查。 
    //原先的声明 
    char *strcpy();
    //现在的声明 
    char *strcpy(char *dst, const char *src);
    可以省略参数名称,只保留参数类型 
    char *strcpy(char *, const char *);
    最好不要省略参数名称。尽管编译器并不理睬形参的名称,但它们经常能向程序员传递一些有用的信息。 
    //原先的函数定义 
    char *strcpy(dst, src) char *dst, *src;
    {
        ...
    }
    //现在的函数定义 
    char *strcpy(char *dst, const char *src) //注意没有分号
    {
        ...
    }
    每次编写新函数都应该使用原型,并确保每次调用时都可见。不要使用K&R C老式的函数声明方法,除非需要使用缺省的类型升级。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到