Defect Report #086

Submission Date: 03 Dec 93
Submittor: WG14
Source: Clive Feather
Question
Item 23 - object-like macros in system headers
Consider an implementation where <string.h> defines the macro strlen thus:
#define strlen __internal_fast_strlen
and declares functions (defined elsewhere) called __internal_fast_strlen and strlen, both with the functionality of strlen in subclause 7.11.6.3. Is such an implementation conforming with respect to the rules of subclause 7.1.7?
Note that a strictly conforming application can detect this situation by comparing the value of the expression strlen taken before and after a #undef.
Response
The question asks whether a system header can define the name of a library function as an object-like macro, and cites subclause 7.1.7 as not using the term ``function-like.''
The Committee notes the absence of this term, but also notes that subclause 7.1.7 requires that the macro definition always be suppressed when not followed by an open parenthesis. Therefore such macros must either be function-like, or the implementation must cause them to act as function-like macros.
Previous Defect Report < - > Next Defect Report