Unix Programming - Evolution of C - C Standards
C standards development has been a conservative process with
great care taken to preserve the spirit of the original C language,
and an emphasis on ratifying experiments in existing compilers rather
than inventing new features. The C9X charter[143] document is an excellent expression
of this mission.
Work on the first official C standard began in 1983 under the
auspices of the X3J11 ANSI committee. The major functional additions
to the language were settled by the end of 1986, at which point it
became common for programmers to distinguish between “K&R
C” and “ANSI C”.
|
Many people don't realize how
unusual
the C
standardization effort, especially the original ANSI C work, was in
its insistence on standardizing only tested features. Most language
standard committees spend much of their time inventing new features,
often with little consideration of how they might be implemented.
Indeed, the few ANSI C features that
were
invented from scratch — e.g., the notorious
“trigraphs”—were the most disliked and least
successful features of C89.
|
|
--
Henry Spencer
|
|
|
Void pointers were invented as part of the standards effort, and have
been a winner. But Henry's point is still well taken.
|
|
--
Steve Johnson
|
|
While the core of ANSI C was settled early, arguments over the
contents of the standard libraries dragged on for years. The formal
standard was not issued until the end of 1989, well after most
compilers had implemented the 1985 recommendations. The standard was
originally known as ANSI X3.159, but was redesignated ISO/IEC
9899:1990 when the International Standards Organization (ISO) took
over sponsorship in 1990. The language variant it describes is
generally known as C89 or C90.
The first book on C and Unix portability practice,
Portable C and Unix Systems Programming [Lapin], was published in 1987 (I wrote it under a corporate
pseudonym forced on me by my employers at the time). The Second
Edition of [Kernighan-Ritchie] came out in 1988.
A very minor revision of C89, known as Amendment 1, AM1, or C93,
was floated in 1993. It added more support for wide characters and
Unicode. This became ISO/IEC 9899-1:1994.
Revision of the C89 standard began in 1993. In 1999, ISO/IEC
9899 (generally known as C99) was adopted by ISO. It incorporated
Amendment 1, and added a great many minor features. Perhaps the most
significant one for most programmers is the C++-like ability to
declare variables at any point in a block, rather than just at the
beginning. Macros with a variable number of arguments were also
added.
The C9X working group has a
Web page, but no third standards effort is planned as
of mid-2003. They are developing an addendum on C for
embedded systems.
Standardization of C has been greatly aided by the fact that
working and largely compatible implementations were running on a wide
variety of systems before standards work was begun. This made it
harder to argue about what features should be in the standard.
[an error occurred while processing this directive]
|