home bbs files messages ]

Just a sample of the Echomail archive

COMPLANC:

<< oldest | < older | list | newer > | newest >> ]

 Message 242,862 of 243,097 
 Tim Rentsch to Keith Thompson 
 Re: _BitInt(N) 
 06 Jan 26 21:57:01 
 
From: tr.17687@z991.linuxsc.com

Keith Thompson  writes:

> Tim Rentsch  writes:
>
>> James Kuyper  writes:
>
> [...]
>
>>> Note: in C2023, the [predefined macro names] section says:  "Any other
>>> predefined macro names:  shall begin with a leading underscore
>>> followed by an uppercase letter;  or, a second underscore...".  For
>>> earlier versions of the standard, user code should avoid using such
>>> identifiers because they were reserved for all purposes, but that's no
>>> longer the case.  Now, they should be avoided because they may be
>>> pre-defined by the implementation, which means that any attempt to use
>>> them might have unpredictable results.
>>
>> That's right in the sense that if the implementation is unknown then
>> unexpected results may occur.  However, if the implementation is
>> known, then we can find out what results are expected by consulting
>> the implementation's documentation for extensions, since any such
>> macro name must qualify as an extension, and so much be documented.
>>
>> Note by the way that the description in N3220 section 6.10.10.1
>> paragraph 2 makes using #define or #undef be undefined behavior only
>> for macro names in the subclause (and also a short list of other
>> identifiers).  Hence any other predefined macro name may be used,
>> definedly, simply by using #undef and then #define for the macro
>> name in question (in particular, under C23 rules, but not earlier
>> versions of the C standard).
>
> I don't *think* that all implementation-specific predefined macros have
> to be documented -- at least, I'd be surprised if that were the intent.
>
> For example, I don't think an implementation is required to document its
> use of _STDIO_H (the include guard header in the glibc implementation of
> ).
>
> Though it's not normative, N3220 J.5.1 (Common extensions) says:
>
>     Examples of such extensions are new keywords, extra library
>     functions declared in standard headers, or predefined macros with
>     names that do not begin with an underscore.

I gave a clarifying response to this question in my recent
followup to the post from James Kuyper.

--- SoupGate-Win32 v1.05
 * Origin: you cannot sedate... all the things you hate (1:229/2)

<< oldest | < older | list | newer > | newest >> ]


(c) 1994,  bbs@darkrealms.ca