在我出生之前C是怎么样的?

时间:2009-09-23 14:51:01

标签: c kr-c

这是一个问题,C(K& R C)是怎样的?问题是关于C生命的前十年或二十年?

我知道,我从我的大学教授那里听到了它们,C没有我们今天用ANSI C获得的标准库。他们曾经在包裹的程序集中编写IO例程!第二件事是K& R书,是程序员阅读的最好的书之一,这就是我的教授告诉我们的:)

我想了解更多关于'C'的信息。例如,与ANSI C相比,你对它有什么重大区别,或者C如何改变程序员对编程的看法?


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

他们是关于C ++的,我知道!这就是为什么我想了解更多关于C的原因,因为这两篇论文是关于 C ++是如何从C 诞生的。我现在在询问之前的是怎样的。感谢Lazarus指出K& R的第1版,但我仍然希望了解更多关于C大师的C;)

11 个答案:

答案 0 :(得分:12)

嗯,首先,没有任何功能原型垃圾。因此宣布main()

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

也没有任何那种花哨的双斜线评论。也没有列举。真人使用#define

<啊> Aah,给我的眼睛带来一丝泪水,记住过去的美好时光: - )

答案 1 :(得分:7)

查看贝尔实验室K&amp; R书中的'home page',特别是“语言的历史可以追溯到”C语言的发展“,来自HOPL II,1993“

答案 2 :(得分:3)

根据个人经验,我的前两个C编译器/开发环境是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数据寻址。

答案 3 :(得分:3)

维基百科对此主题有some information

答案 4 :(得分:3)

以下是使用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;
}

答案 5 :(得分:3)

我在1986年开始使用V on VAX / VMS。以下是我记得的差异:

  • 没有原型 - 函数定义和延迟写成
    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()的返回值的一部分;对于前ANSI编译器,你到);

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

  • 多年来,很多的东西被添加到math.h中,特别是在C99标准中; '80年代复古C不是数字工作的最佳工具;

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

答案 6 :(得分:2)

查看版本6 Unix内核的代码 - 这就像C看起来的那样!

请参阅Lion's Commentary on Unix 6th EditionAmazon)。

另外,如果你告诉我们你的年龄会更容易 - 你的个人资料说你是22岁,所以你在1987年之前询问代码。

另请考虑:1984年的The Unix Programming Environment

答案 7 :(得分:2)

虽然由于显而易见的原因,核心语言出现在图书馆之前,如果您获得了第一版K&amp; R发表于1978年,你会发现图书馆非常熟悉。此外,C最初用于Unix开发,并且该库连接到OS的I / O服务。所以我认为你的教授的断言可能是伪造的。

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

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

而不是:

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

。注意使用VOID; K&amp; R C没有空类型,并且通常VOID是定义为int *的宏。毋庸置疑,为了使其能够工作,早期编译器中的类型检查是允许的。从实际的角度来看,C验证代码的能力很差(很大程度上是因为缺乏函数原型和弱类型检查),因此普遍使用了这类工具。

1978年,语言的定义是 K&amp; R书。 1989年它由ANSI标准化,后来由ISO标准化,第2版不再被视为语言定义,并且基于ANSI C.它仍然是关于C IMO的最佳书籍,并且是一本很好的编程书。 / p>

Wikipedia有一个简短的说明,可能有所帮助。你最好的选择是获得K&amp; R的第一版副本,但是,我不会用它来学习C,获得第二版。为此。

答案 8 :(得分:0)

我在20世纪80年代初开始使用C.我从现在到现在看到的关键区别是,早期的C没有功能原型,正如有人指出的那样。我用过的最早的C和今天的标准库差不多。如果有一段时间C没有printf或fwrite,那就是我的时间!我从最初的K&amp; R书中学到了C语言。这确实是一个经典,并证明技术先进的人也可以是优秀的作家。我相信你可以在亚马逊上找到它。

答案 9 :(得分:0)

您可能会从您正在寻找的时间段中看一下混淆的C竞赛条目。

答案 10 :(得分:0)

16位整数在奥地利时代非常普遍。