Fw: Issue: headers may use non-reserved identifiers

C Howland cc1964t@gmail.com
Wed Apr 20 22:11:13 GMT 2022


> ------------------------------
> *From:* Newlib on behalf of Pavel M <pavel.morozkin@gmail.com>
> *Sent:* Wednesday, April 20, 2022 4:35 PM
> *To:* newlib@sourceware.org <newlib@sourceware.org>
> *Subject:* Issue: headers may use non-reserved identifiers
>
>
> Hi all,
>
> Issue: headers may use non-reserved identifiers.
>
> Example:
> #define _reent 0
> #include <stdio.h>
>
> $ gcc t567.c -std=c11
> t567.c:1:16: error: expected ‘{’ before numeric constant
>     1 | #define _reent 0
>       |                ^
> t567.c:1:16: error: expected ‘{’ before numeric constant
>     1 | #define _reent 0
>       |                ^
> and so on...
>
> Per C11 _reent, _on_exit_args, etc. are non-reserved identifiers.
>
> Consider fixing.
>
> P.S. Good if it leads to compile time errors, not good if it doesn't (wrong
> translation unit produced => wrong code generated => wrong runtime
> behavior).
>
> --
> Pavel
> ------------------------------
>


No, the headers do not use non-reserved identifiers.  Look at the standard
again, as the second dash item in section 7.1.3 Reserved Identifiers
reserves all identifiers that start with underscore.  The example program
violates the standard.  In short, user programs may not use identifiers
that start with underscore.  (More precisely there are some very-limited
cases in which they can, but preprocessor identifiers is not one of them.)


More information about the Newlib mailing list