Document Number: WG14 N675/X3J11 97-038
Changes related to DRs 77, 143, 144, 146, 147, and 149
The formal responses to defect reports 77, 143, 144, 146, 147, and 149
all contained the recommendation that the issue should be revisited
during the next revision of the Standard.
At Rex's request, and since I was the original author of these DRs, I
have assembled proposals for changes related to these DRs. I have not
bothered with rationale for these proposals, since the DRs adequately
document the issues anyway. Instead I've just written them as a set of
wording changes (sometimes taken directly from the DR, sometimes not).
The proposal related to each DR stands alone from the others.
In subclause 220.127.116.11, change the last sentence of paragraph 2 to:
The object exists, has a constant address, and retains its last-
stored value throughout the execution of the entire program.
Append to footnote 21:
The term "constant address" means that two pointers to the object
constructed at possibly different times will compare equal. The
address may be different during two different executions of the same
Add to the end of paragraph 3:
During execution of the associated block, the object has a constant
In subclause 18.104.22.168 (realloc ()), append to paragraph 3 (returns):
If a pointer is returned which does not compare equal to /ptr/, then
the object has moved and /ptr/ is a pointer that refers to freed
In subclause 22.214.171.124 (fopen ()), replace paragraph 3 with:
The argument /mode/ points to a string. The file is opened in the
mode determined by the longest initial subsequence of this string
that matches one of the following sequences:
/r/ open text file for reading
[existing list is left unchanged]
If the string does not begin with any of these sequences, the
behaviour is undefined.
 Implementations may interpret the presence or absence of
additional characters following these sequences (for example, a
following /0/ might affect the number of null characters appended to
the end of a binary stream). However, this interpretation may not
affect any behaviour defined by this International Standard.
In subclause 6.8, change paragraph 2 to read:
A preprocessing directive consists of a sequence of preprocessing
tokens that begins with a # preprocessing token that (at the start
of translation phase 4) is either ...
Add, after paragraph 6:
EMPTY # include <file.h>
the sequence of preprocessing tokens on the second line is *not* a
preprocessing directive, because it does not begin with a # at the
start of translation phase 4, even though it will do so after the
macro /EMPTY/ has been replaced.
Delete the constraint in subclause 6.1.2, as it is nugatory.
Add to the end of subclause 7.1.7:
There is a sequence point immediately before a library function
Add to the end of Annex C:
- Immediately before a library function returns (7.1.7).
In subclause 126.96.36.199 paragraph 4, replace:
... assigning a value to a static storage duration variable of type
... assigning a value to an object declared as /volatile/ ...
Clive D.W. Feather | Associate Director | Director
Tel: +44 181 371 1138 | Demon Internet Ltd. | CityScape Internet Services Ltd.
Fax: +44 181 371 1150 | <firstname.lastname@example.org> | <email@example.com>
Written on my laptop - please reply to the Reply-To address <firstname.lastname@example.org>