Defect Report #147
Submission Date: 23 Feb 95
Submittor: BSI
Source: Clive D.W. Feather
Question
Submitted to BSI by Clive D.W. Feather clive@sco.com.
In this Defect Report, identifiers lexically identical to those
declared in standard headers refer to the identifiers declared in those
standard headers, whether or not the header is explicitly mentioned.
This Defect Report has been prepared with considerable help from
Mark Brader, Jutta Degener, Ronald Guilmette, and a person whose
employment conditions require anonymity. However, except where stated,
opinions expressed or implied should not be assumed to be those of any
person other than myself.
Defect Report UK 031: Sequence points in library functions
There is no requirement for a sequence point to occur within a
library function, since it might not be written in C. Consider the
following code:
#include <string.h>
char s[10];
/* ... */
(strcpy)(s, "Testing") [0] = 'X';
Any function written in C must have a sequence point after
the last full expression evaluated (which will be the returned value if
there is one), so if strcpy were a C function, the
assigning of 'T' to s[0] would be
completed before the call returned.
However, since library functions might not be written in C, they
might not have such a sequence point. If not, then the above statement
is in breach of the requirements of the second paragraph of subclause
6.3.
Suggested Technical Corrigendum:
Add to the end of subclause 7.1.7:
There is a sequence point immediately before a library function
returns.
Add to the end of annex C:
Immediately before a library function returns (7.1.7).
Add a reference to 7.1.7 in the Forward References of
5.1.2.3, and in the relevant Index entry.
Response
We agree that the current wording does not make this clear. The
next revision of the C Standard will clarify that every function return
is a sequence point. The suggested changes will be used.
Previous Defect Report
< - >
Next Defect Report