Skip to main content

基本概念

当你在凝视深渊的时候,深渊也正在凝视着你 ——尼采

行为

TODO:更新一下

开始之前,我先介绍几个概念。即使你没有详细了解过,也一定对下面三个名词早有耳闻。

  • 未定义行为(Undefined Behavior,简称 UB):程序允许做任何事情。

  • 未指定行为(Unspecified Behavior):程序允许在二种或多种允许的行为中的一个,并且可以在同一程序中重复时产生不同结果。

  • 实现定义行为(Implementation-defined Behavior):在未指定的基础上,实现规范了这个行为。

正是它们,为 C 语言增添了一抹亮色(大嘘)。之后的文章我们还会提到他们。

原则上可以粗略地认为,它们危险程度逐级递减。这当然也取决于实际情况,不能一概而论。

C 和 C++ 的标准在不断努力消灭这些行为的同时,出于种种原因仍然有所保留。你可能深感不解,为什么不索性澄清玉宇,将一切邪恶绳之以法呢?这当然是有原因的,但是在这里讨论,就远远超出本文的范围了。正如卷首所言,我不打算过多的引入编程史学的迷思和编程哲学的探讨。

TODO:详细讨论一下

同时也需要注意,不要一股脑的把一切的错误都归结于它们。是因为你的错误导致了它们,而不是它们导致了你的错误。更重要的是,绝大多数的错误,最后是很好的定义了的,本就不属于上面的任何一种情况。

好在如今大多数的编译器和智能 IDE 都能够较为敏锐(或者说,过于敏锐)地捕捉到这些可能出现的问题,我们没必要自找麻烦,但也不可掉以轻心。

历史

下面非常简要的叙述一下 C 语言的历史。同时也是为了说明本书的适用范围。

  • 1969 年,B 语言在 BCPL 基础上问世。
  • 1971 年,NB(new B)语言问世。
  • 1972 年,NB 被重命名为 C 语言。
  • 1973 年,Unix 被用 C 语言重写。
  • 1978 年,The C Programming Language 第一版问世。

这本书为什么重要呢?这本书的作者是 Brian W. Kernighan 和 Dennis M. Ritchie,正是 C 语言的主要创立者。以他们的名字命名的 C 语言叫 K&R C。你看的一些经典书籍里面反复提到的 K&R C,就出自这里。

  • 1983 年,ANSI X3J11 委员会成立,C 语言开始标准化之路。
  • 1989 年,C 语言第一个正式标准 ANSI C 发布,即为 C89,
  • 1990 年,标准被 ISO 收录(ISO/IEC 9899:1990),即为 C90。

这之后的,经过标准化的 C 语言,被称为 ANSI C 或者 ISO C。C 语言进入了崭新的时代。K&R C 与 ISO C 差别巨大,以至于这个差别本身都能造成许多的问题。但由于时移世易,这些问题已经早早地不应该在我们的讨论范围之中了。本文展开的讨论,都是基于 ISO C 的。

  • 1995 年,C95 发布。
  • 1999 年,C99 发布。
  • 2011 年,C11 发布。
  • 2017 年,C17 发布。
  • 2023 年,C23 发布。

你可能感到惊讶,C 语言问世已经有五十年了,却仍长盛不衰!让我们 穿越时空的迷雾,一起探寻这古老而神秘的语言吧。