代码之家  ›  专栏  ›  技术社区  ›  Khaled Alshaya

在我出生之前C长得怎么样?

  •  9
  • Khaled Alshaya  · 技术社区  · 15 年前

    问题是,C(K&R C)看起来怎么样?问题是关于C人生的头十年或二十年?

    我知道, 我是从我大学的一位教授那里听到的 ,C没有我们今天用ANSIC得到的标准库。他们以前用包装好的程序集编写IO例程!第二件事是K&R书,是程序员有史以来最好读的书之一,这是我的教授告诉我们的。

    我想更多地了解好的ol'c。例如,与ansi c c相比,您对它了解的主要区别是什么,或者c是如何改变程序员对编程的看法的?


    作为记录,我主要是在阅读了这两篇论文之后问这个问题:

    它们是关于C++的,我知道!这就是为什么我想更多地了解C,因为这两篇论文是关于 C++是C语言诞生的 . 我现在在问它看起来怎么样 之前 那。谢谢 Lazarus 因为我指出了K&R的第一版,但我仍然希望从So Gurus;了解更多关于C的信息。)

    11 回复  |  直到 14 年前
        1
  •  2
  •   Jonathan Leffler vy32    15 年前

    看看6版Unix内核的代码——这就是C看起来的样子!

    Lion's Commentary on Unix 6th Edition ( Amazon )

    另外,如果你告诉我们你的年龄——你的个人资料上说你22岁,那么在1987年之前你会问一些关于代码的问题。

    还考虑: The Unix Programming Environment 从1984年开始。

        2
  •  12
  •   paxdiablo    15 年前

    好吧,首先,没有那种函数原型垃圾。 main() 声明如下:

    /* int */ main(c,v)
    int c;
    char *v[];
    {
        /* Do something here. */
    }
    

    而且,也没有任何一条漂亮的双斜杠评论。也不枚举。真正的男人 #define .

    啊,让我泪流满面,想起往日的美好时光。

        3
  •  7
  •   Lazarus    15 年前

    看看 home page “对于贝尔实验室的K&R书,尤其是标题”语言的历史可追溯到“C语言的发展”,摘自Hopl II,1993年。”

        4
  •  3
  •   Bob Kaufman    15 年前

    根据个人经验,我的前两个C编译器/dev环境是desmet C(16位MS-DOS命令行)和lattice C(16位MS-DOS命令行)。Desmet C自带文本编辑器( see.exe )和库——非标准函数 scr_rowcol() 定位光标。然而,即使在那时,也有一些标准的功能,例如 printf(), fopen() fread(), fwrite() and fclose() .

    当时的一个有趣的特点是,你可以在四种基本的记忆模式中进行选择——S、P、D和L。这些年来,其他的变化也来了又去,但这些都是最显著的。S是一个“小”的模型,代码和数据都有16位寻址,每个都限制在64K。L使用24位寻址,这是一个16位段寄存器和一个16位偏移寄存器来计算地址,将地址空间限制为1024K。当然,在16位DOS的世界中,物理限制是640K。P和D是两种模式之间的折衷,其中P允许24位(640K)代码和64K数据,D允许64K代码和640K数据寻址。

        5
  •  3
  •   Nathan Taylor    15 年前

    维基百科有 some information 关于这个话题。

        6
  •  3
  •   plinth    15 年前

    下面是一个更好地使用ANSI C更改的代码示例:

    double GetSomeInfo(x)
    int x;
    {
        return (double)x / 2.0;
    }
    
    int PerformFabulousTrick(x, y, z)
    int x, int y;
    double z;
    {
        /* here we go */
        z = GetSomeInfo(x, y); /* argument matching?  what's that? */
        return (int)z;
    }
    
        7
  •  3
  •   John Bode    15 年前

    1986年,我开始与C合作开发VAX/VMS。以下是我记得的区别:

    • 没有原型——函数定义和Delcaration被写为
        int main() /* no void to specify empty parameter list */
        {
          void foo(); /* no parameter list in declaration */
          ...
        }
        ...
        void foo(x,y)
          int x;
          double y;
        {
          ...
        }
    
    • 没有通用(void)指针类型;所有 *alloc() 返回的函数 char * 相反(这也是为什么有些人仍然对malloc()的返回值进行强制转换的原因之一);在使用pre-ansi编译器时, 至);

    • 变量函数的处理方式不同;不需要任何固定参数,头文件的命名方式也不同(varargs.h而不是stdarg.h);

    • 许多 这些年来,尤其是在C99标准中,数学中增加了很多东西;80年代的C年份并不是最伟大的数字计算工具;

    • 库没有标准化;几乎所有实现都有一个stdio、math、string、ctype等版本,但不同实现的内容不一定相同。

        8
  •  2
  •   Clifford    15 年前

    由于显而易见的原因,核心语言出现在图书馆之前,如果你掌握了1978年出版的K&R的第一版,你会发现图书馆非常熟悉。C最初也用于Unix开发,库连接到操作系统的I/O服务。所以我认为你的教授的断言可能是假的。

    最明显的区别是函数的定义方式:

    VOID* copy( dest, src, len )
        VOID* dest ;
        VOID* src ;
        int len ;
    {
       ...
    }
    

    而不是:

    void* copy( void* dest, void* src, int len )
    {
        ... 
    }
    

    例如。注意void;k&r c的使用没有void类型,void通常是一个定义为int*的宏。不用说,为了让这项工作正常进行,早期编译器中的类型检查是允许的。从实践的角度来看,C验证代码的能力很差(主要是由于缺少函数原型和弱类型检查),因此工具的普及程度也很低。

    1978年语言的定义 K&R手册。1989年,它被美国国家标准化组织(ANSI)和后来的国际标准化组织(ISO)标准化,第二版不再被视为语言定义,而是以美国国家标准化组织(ANSI)C为基础。它仍然是国际海事组织(C IMO)的最佳书籍,也是一本很好的编程书籍。

    有一个简短的描述 Wikipedia 这可能会有所帮助。你最好的办法是得到一本K&R的第一版,但是我不会用它来学习C,而是用它来学习第二版。

        9
  •  0
  •   Daniel Spiewak    15 年前

    我从20世纪80年代初开始使用C。我所看到的主要区别是早期的C没有函数原型,有人指出。我使用过的最早的C与今天的标准库几乎相同。如果有一段时间C没有打印或传真,那甚至早于我的时间!我从K&R的原著中学到了C。这确实是一部经典之作,也证明了技术成熟的人也可以成为优秀的作家。我相信你可以在亚马逊上找到它。

        10
  •  0
  •   quillbreaker    15 年前

    您可能会在您寻找的时间段内浏览模糊的C竞赛条目。

        11
  •  0
  •   EvilTeach    14 年前

    16位整数在OL'days中非常常见。

    推荐文章