Defect Report #108
Submission Date: 03 Dec 93
Submittor: WG14
Source: Ron Guilmette
Question
ANSI/ISO C Defect Report #rfg15:
Subclause 7.1.3 lists the set of reserved identifiers, but this
list does not include keywords (subclause 6.1.1).
Subclause 6.1.1 says (in a Semantics section):
The above tokens (entirely in lower-case) are reserved (in translation
phases 7 and 8) for use as keywords, and shall not be used otherwise.
Based upon the above named sections of the C Standard, I am forced
to conclude that the following code is strictly conforming. Is this
a correct conclusion?
#define double void
#include <math.h>
#undef double
void example (double d1, double d2)
{
d1 = acos (d2);
}
My impression is that few (if any) existing implementations now accept
such code. I am therefore inclined to believe that the Committee's
true intentions were that all keywords (as listed in subclause
6.1.1) should be considered to be reserved identifiers, at least during
translation phase 4, and at least while processing #include
directives which name standard include files provided by the implementation
(as listed in subclause 7.1.2).
I believe that the proper way to address this problem would be to
add another stipulation (regarding reserved identifiers) to subclause
7.1.2.1. This additional stipulation might read as follows:
If, during inclusion of any one of the standard headers listed
in the preceeding section (during translation phase 4) any one of
the keywords listed in subclause 6.1.1 is defined as a preprocessor
macro, the behavior is undefined.
Response
This program's behavior is undefined because of the restriction on
inclusion of standard headers in subclause 7.1.2:
The program shall not have any macros with names lexically identical
to keywords currently defined prior to the inclusion.
The Committee's intention was indeed to otherwise allow macros to
mask keywords.
Previous Defect Report
< - >
Next Defect Report