This is the mail archive of the mailing list for the newlib project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: selective linking of floating point support for *printf / *scanf

On 08/29/2014 10:03 AM, Eric Blake wrote:
> On 08/29/2014 09:51 AM, Grissiom wrote:
>>> Yes, it does.  The namespace reserved for the implementation is _[_A-Z].
>>>  The namespace _[a-z] is still available for the user.  Which means the
>>> user can declare their own _printf_float, and WE (as the implementation)
>>> MUST NOT INTERFERE with it.  Since WE are the implementation, we should
>>> use the namespace reserved for us, namely __printf_float.
>> You mean _[_a-z] (lower case) is the namespace reserved for implementation,
>> right?
> No, I spoke correctly.  The namespace reserved for the implementation is
> all double underscores, and all single underscore followed by a capital.
>  Single underscore followed by a lower case is NOT reserved for the
> implementation, and is therefore free for use by the user, and therefore
> the implementation must not interfere with the user's use of that namespace.

Quoting POSIX:

> The following identifiers are reserved regardless of the inclusion of headers:
> 1.
>     With the exception of identifiers beginning with the prefix _POSIX_, all identifiers that begin with an <underscore> and either an uppercase letter or another <underscore> are always reserved for any use by the implementation.
> 2.
>     All identifiers that begin with an <underscore> are always reserved for use as identifiers with file scope in both the ordinary identifier and tag name spaces.

Of course, that list feels a bit too restrictive in light of existing
standardized uses of underscore followed by capital. such as _Bool and
_Exit in C99; and C11 has introduced even more things like _Noreturn.
But the REASON that C has been able to extend the language and add more
keywords beginning with underscore-capital is precisely because those
names were reserved for the implementation, not the user, so it can't
break any user code.

Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library

Attachment: signature.asc
Description: OpenPGP digital signature

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]