January 28, 1999
N869 is a revised draft incorporating the changes detailed
in the Santa Cruz minutes (N859, incorporating parts of
N847, N851, and N852), plus a few more corrections and
editorial changes. It contains diff marks for all of the
changes from CD2 except for very minor formatting changes.
The Foreword and Introduction are now part of the body of
the document (i.e., they follow the Table of Contents,
appear in it, and have page numbers). The Foreword now
points to the committee's web page and mentions the
Rationale and DR Log, notes that this edition of the
standard replaces the previous edition, and contains a list
of major changes from the previous edition. At the moment,
the list is essentially the list of changes from the
committee's web page; opinions as to which of these changes
are worth mentioning and which aren't will be gratefully
accepted, as will any notes about changes that have been
Uses of the term ``printable character'' have been replaced
by the more widely used ``printing character''. Likewise,
``upper case'' and ``upper-case'' have been replaced by
``uppercase'' (ditto for ``lowercase'').
The type _Bool is now correctly classified as an unsigned
integer type and thus is also a basic type and an integer
The Usual Arithmetic Conversions now specify a default type
domain for the result, which allowed removing all of the
explicit statements that matched the default as well as
covering the cases where we forgot to specify it (e.g., ?:).
Conversions in general have been cleaned up to avoid missing
or conflicting requirements.
188.8.131.52 now states unambiguously that any conversion of a
null pointer constant to a pointer type results in a null
pointer, not just those resulting from assignment or
The description of getc now states unambiguously that end-
of-file is sticky.
The UCN annex has been moved to where the formal definition
of sequence points annex used to be to avoid renumbering the
2 SC22/WG14 N870
floating point, complex, and LIA annexes; since the UCN
annex is normative, it makes sense to have it appear sooner.
Please note that I still haven't decided on a final ordering
of the annexes and am still soliciting suggested orderings.
2. N869 Errata
1. N847 items 10, 19, 33, and 43 were overlooked and have
not been applied. Item 19 should be revisited as,
upon further reflection, I believe that Clive's
proposed words are exactly correct and should be used
instead of the revised words in the minutes.
2. A single numbered example occurs in 6.4.9, 184.108.40.206,
220.127.116.11, and 18.104.22.168. These examples should be
3. In 7.12, the Recommended practice in p9 is misplaced.
The parenthetical remark at the end should have been
appended to F.5p2. The remainder should have been
moved to the end of 22.214.171.124.2.
4. In 7.16, __bool_true_false_are_defined should be
described as an ``integer'' constant rather than a
5. B.7 and B.17 need to be updated to match the revised
3. My comments
1. Given that selection and iteration statement are now
at least two and frequently three blocks, do we want
to revisit the block nesting limit in 126.96.36.199?
2. In 6.6, we say that constant expressions shall not
contain certain operators, except in a subexpression
that is not evaluated. The exception used to be just
for the operand of sizeof, but VLAs cause sizeof
operands to be evaluated, so we changed it. However,
there are other operators that don't evaluate certain
operands in some cases (&&, ||, ?:), so this may be an
unintended loosening of the rules.
3. The title of 6.8.2 should probably be changed to just
``Compound statement''. References to 6.8.2 should be
checked; most of them should probably be changed to
4. In 188.8.131.52, we should probably say something about
what happens when clause-1 is a declaration (e.g.,
it's reached in the order of execution before the
SC22/WG14 N870 3
first evaluation of the controlling expression).
5. The descriptions of the standard pragmas in 7.3.4,
7.6.1, and 7.12.2 talk about their behavior in a
``compound statement''; that should, perhaps, be
changed to ``block''.
6. In 7.24.1, I believe that WCHAR_MAX and WCHAR_MIN
should be described as expanding to integral constant
expressions. I also believe that the description of
WEOF should be moved from 7.25.1 to here.
7. The descriptions of the restartable conversion
functions in 184.108.40.206.2, 220.127.116.11.3, 18.104.22.168.1, and
22.214.171.124.2 say that ``the conversion state is
undefined''. I think this should say ``unspecified''
4. Open Issues
1. N847 item 4 (character set definitions) is still open.
2. The text version of the draft has not been reviewed
and contains numerous formatting problems such as
superscripts overprinting information from the
previous line and unintelligible expressions.
3. There are still some typesetting issues to be
addressed, particularly in annex F.
4. All hyphenated terms should be examined to determine
where the hyphenation is appropriate and where it
isn't. All italicized terms should also be examined.
5. All of the cross references need to be checked for
relevance and accuracy.
6. The draft still needs some work to fully comply with
Part 3 of the ISO Directives. The major issues
-- the formatting of tables
-- we have many subclauses that contain text in
addition to subordinate subclauses; ISO strongly
-- all references to a specific version of a
standard must include the date; it is not
sufficient to include the date only in the
Normative references or the Bibliography as we
4 SC22/WG14 N870
-- annexes are required to appear in the order in
which they are cited in the text (and thus there
has to be a citation for each annex); if anyone
has any strong feelings about ordering, please
let me know
-- Larry Jones