C Standard Questions
|
|
This page is a collection of questions regarding the ISO standard for the
C language.
The fact that a programming language is "standardized" doesn't mean there
are no problems left to solve or questions left to ask. Even after close
reading of a standard there often are some unclear points, especially if
one isn't use to interprete the language used in standardization documents
(the so-called "standardese").
While I am quite experienced in writing C programs, and while I did study
the standard quite closely when I was employed to write C compilers, I am
not an official spokesperson of either ISO, ANSI, or anybody else.
All answers summarized on this page have been derived by discussions
(usually on Usenet) with other people, usually far more knowledgeable than
yours truly.
- The 1990 Standard
-
Of course the prime source to look for answers about C is the language
standard itself. It is not available in electronic form, but
can be ordered from ISO, either directly
on the Web or by writing to
ISO Sales
Case Postale 56
CH-1211 Genève 20
Switzerland
The standard's official number is ISO/IEC 9899:1990(E).
- The Rationale
-
The original ANSI version of the standard, which later was adopted by
ISO, was accompanied by a document called the "rationale". It never was
part of the standard (it was included "for information only"), and
nowadays it isn't distributed with the standard anymore. The rationale
explains why the choices made in the standard were made that
way instead of some other way. It is available in
electronic form,
and is a very enlightening read if you're concerned about standard C.
- Technical Corrigenda
-
Like any other ISO standard, the C standard is being reviewed
continuously. So far, these reviews have produced two documents
clarifying obscure points in the standard, known as "Technical
Corrigenda". As an exception to ISO's distribution rules, both
the Technical
Corrigendum 1 and the
Technical
Corrigendum 2 are available on the Web.
Lysator in Sweden also has
summaries for TC1 and TC2.
- Normative Addendum 1
-
Besides these technical corrigenda, which basically do not change the
C standard except in minor ways, there's also a "Normative Addendum 1"
which extends the standard considerably, especially the definitions
for wide-character I/O. This document is about 50 pages thick and also
can be ordered from ISO. Only a
brief description
of its contents is available on the Web.
- Programming in C
-
This is a web site put
together by Jutta
Degener. It deals with a multitude of aspects of the C language,
including its history and related laguages. (You might note that quite
a few of the other links on my page here lead to this site.) Highly
recommended!
- The comp.lang.c FAQ
-
The list of frequently asked questions (FAQ) of the newsgroup
comp.lang.c is an excellent source of answers concerning both
advanced and trivial aspects of the C language. Its plain-text version
is available via ftp from
rtfm.mit.edu
(252 kB), but there's also an
HTML version,
and the FAQ's maintainer has recently published it as a book.
- The Ten Commandments for C
Programmers
-
A classic of hacker lore. All of its advice is correct, and following
it to the letter is most assuredly not a bad idea. (Some of the annotations
are no longer valid for the new C standard.)
- The ISO Committee Draft on the
new C9X Standard
-
In the late ninteen-nineties, the C standard has been extensively revised.
This work culminated in a new standard for the language, ratified by ISO
in 1999 (and hence its document number should be ISO/IEC 9899:1999). The
above link takes you to my summary of the most important changes from the
C language as we have known it until now. The page also contains links to
online versions of the Committee Draft, which is an early version of this
new standard. This is not the final standard, which may differ
substantially from this document, but it may give you a good idea what
has changed and what hasn't.
If you have questions about floating point arithmetic etc.,
check out the following documents:
- IEEE Standards for Floating-Point Arithmetic
-
There are two different IEEE standards for floating-point arithmetic.
They have numbers 754 and 854. Usually, people talk about the 754
standard, which is document ANSI/IEEE Std 754-1985 and has also been
published as ACM SIGPLAN Notices 22(2), pp.
9-25, Feb. 1987.
The ANSI/IEEE Std 854-1987 standard allows both binary and decimal bases
for floating-point values, and it doesn't specify how floating-point
numbers are encoded (i.e. the bit layout).
The ISO standard corresponding to ANSI 754 actually is an IEC standard:
IEC 559:1989.
- What Every Computer Scientist Should Know
About Floating-Point Arithmetic
-
This is an excellent article by David Goldberg which appeared
in ACM Computing Surveys 23(1), pp. 5 - 48,
March 1991. (Warning: the above link is very slow for me, you might be
better off looking it up in Comp. Surveys -- at least if you're
in Europe. YMMV.)
- Language
Issues and Floating-Point Arithmetic
-
There also is the ISO standard on "Language-Independent Arithmetic"
(ISO/IEC 10967-1:1994(E)) which has impacts on C implementations if
they claim to comply to this standard. This is one of the few ISO
standards that is
available on
the net!
References
Any references to the C standard ISO/IEC 9899:1990(E) are abbreviated [ISO]
below. References [TC1] and [TC2] refer to the on-line summaries
mentioned above.
The Questions
- String Initializations
-
If an (automatic) array is initialized by a string literal that has
fewer characters than the array has elements, what happens with the
excess array elements?
- Getting Interactive Input
-
Properly handling user interaction and getting input safely is not
as easy as it looks. This page gives some hints and shows some pitfalls
of C's input/output library.
- Macro Call as Macro Argument
-
If a macro call is an argument to another macro which doesn't use
this argument in its replacement list, is the macro expanded all
the same?
I have a Question...
If you still have questions, follow the steps below in the given order:
- Read your favorite C book. But make sure it's a good book.
Kernighan &
Ritchie or
Harbison &
Steele are recommended,
Schildt's
books are just trash can fodder.
- Read the comp.lang.c FAQ.
- Read the "Rationale".
- Buy the standard and read it.
- Ask your question on the newsgroup comp.lang.c.
- Ask your question on the newsgroup comp.std.c.
- Submit a request for clarification to the ISO workgroup on the
C programming language (ISO JTC1/SC22/WG14).
Good luck!