The Origin and History of C
C was developed by Dennis Ritchie in the early 1970's (Deitel, page 7).
- It was influenced by earlier languages B and CPL (a job control language).
- C is one of the earliest of the currently used imperative higher-order languages, and as such is closer
in several ways to assembler than later languages like Pascal, Modula, or Ada.
- As with UNIX, it is written primarily in lower-level C, with only a small kernel in assembler
(implementing, for example, the basic integer and floating-point operations).
The Kernighan and Ritchie book (The C Programming Language) was for years a de facto standard for C.
- It was only weakly type-checked, and arbitrary type-casts and pointer arithmetic were features of the
coding style of early C.
- The positive features of C included
- preprocessing (using macro expansions based on hardware configuration, presence of other files,
etc.)
- initialization at declaration time
- a powerful include facility allowing multifile specification and a tool make
(developed by Stu Feldman at Bell Labs) to allow graceful compilation/recompilation of these linked files
- extensive libraries for inclusion
- and (for the time) general and structured control statements.
- Other notable features of C are block-local variables and flat scope; all procedures are functions and
all parameters are passed by value, leading to an additional role for pointers.
- Many constructs passed by the C compiler often lead to trouble, and tools such as LINT were
developed as preprocessor adjuncts to catch some of these.
- Many implementations also added constructs such as the void type and enumerations to
promote expressivity and type-checking.
These changes and others were included in C in 1988 by the ANSI C standard. The ANSI C standard
borrows many features of C++, and adds others. The main change was a change in the method of
specification of functions for type-checking and self-documentation.
Until recently, C was principally an imperative UNIX language. More recently, two other trends have
emerged: one, the extension of C to object-oriented and parallel versions such as C++; the other, the
development of PC versions and development environments, including Borland's Turbo C and C++.