C Standard · Amendments · Railroad-Track Diagrams · Notation
``Standard C'' is a term with a fairly precise definition. This document supplies that definition. It also describes the notation used throughout this description of Standard C.
The Standard C programming language described in this document corresponds to the American National Standards Institute (ANSI) standard for the C language -- ANSI X3.159-1989. An identical standard was approved by the International Organization for Standardization (ISO) -- ISO/IEC 9899:1990. This common standard was developed through the joint efforts of the ANSI-authorized C Programming Language Committee X3J11 and the ISO authorized Committee JTC1 SC22 WG14.
Standard C is designed to ``codify existing practice.'' Most of the C code written before the advent of Standard C is still acceptable to one or more Standard C translators. Nevertheless, Standard C is a new language:
This document presents Standard C as a distinct language, not as a historical outgrowth of any particular earlier dialect of C. If you are new to C or are familiar with just a specific dialect, you have a new language to learn.
The C Standard has more recently been amended and clarified.
(approved in 1994) adds extensive support for manipulating
which represent large character sets, and
some additional support for writing source code in national variants of the
ISO 646 character set.
Most of these new features are additions to the
and most library additions are defined or declared
in three new headers --
Many Standard C translators have yet to add these new features,
so this document labels such additions as new with Amendment 1.
For maximum near-term portability, you may wish to avoid them.
Technical Corrigendum 1 (also approved in 1994) supplies a number of clarifications and corrections to the C Standard. These are in response to ANSI Requests for Interpretation or ISO Defect Reports received and processed by X3J11 and WG14 since the C Standard was first issued. None are intended to alter the original definition of Standard C, merely to make its definition more unambiguous and precise. This document reflects the effect of Technical Corrigendum 1, but does not identify any specific changes.
Syntax rules appear in the form of railroad-track diagrams. The diagrams summarize all valid ways that you can form explicit computer text for a given form. Not all forms that you can generate from a railroad-track diagram are necessarily valid. Often semantic restrictions also apply. These are described in separate tables or in running text.
A railroad-track diagram contains boxes that indicate the components you use to create a form. Arrows connect the boxes to indicate the ways that you can combine the components. You can create different text for a form by taking different paths between the boxes. The name of the form appears next to the arrow leading out to the right from the diagram.
Here, for example, is the syntax rule for writing a
name in Standard C:
You generate a valid
name by following the arrows.
Begin with the arrow leading in from the left and continue until you
follow the arrow leading out to the right. In a complex diagram, an
arrow followed by an ellipsis (
connects to the arrow preceded
by an ellipsis immediately below.
Each time you come to a box, you must add the text in the box to the item being created. If the box contains a form, you must add text that matches the form. If the box contains more than one entry, you must add one of the choices. If you come to an intersection with two arrows leading away from it, you can follow either arrow. You cannot follow an arrow in the direction opposite to the way it points.
The railroad-track diagram above tells you:
x) or an
letter, or an
A name can therefore be any of the following:
A A3 _x timer box_2 z173ab an_extremely_long_name_that_also_contains_1_digit
The syntax rule does not tell you about the following semantic limitations:
Awhen comparing names with external linkage from separate translation units.
underscoreare generally reserved for use by an implementation.
Some diagrams require boxes that permit anything except
one or a few items. In these cases,
describes the matching rule. For example,
matches any character except a newline character.
A type face that differs from the running text has a special meaning:
computer text-- any item that can appear explicitly in a text file, such as C source text, input to a program, or output from a program.
comments-- remarks that are not an actual part of the computer text being presented.
form-- a name that stands for one or more explicit computer text patterns. For example, the following defines
digitas a form that you can replace with any of the explicit characters
2, and so on:
digit 0 1 2 3 4 5 6 7 8 9
See also the Table of Contents and the Index.
Copyright © 1989-1996 by P.J. Plauger and Jim Brodie. All rights reserved.