https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53182
--- Comment #8 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- (In reply to Jonathan Wakely from comment #7) > (In reply to Vincent Lefèvre from comment #6) > > Also, note that identifiers that are not reserved should not be used, > > because they could be defined as macros by the developer, who has not tested > > his code with GCC (I'm saying GCC here, but this applies to any compiler). > > Should not be used by who? by non-user code, but this applies in particular to what's inside __attribute__. Here's an example. In MPFR's mpfr.h file, we use: #define __MPFR_SENTINEL_ATTR #if defined (__GNUC__) # if __GNUC__ >= 4 # undef __MPFR_SENTINEL_ATTR # define __MPFR_SENTINEL_ATTR __attribute__ ((sentinel)) # endif #endif But if in my personal C code, I have #define sentinel 1 before the #include's or, in a similar way, compile my program with -Dsentinel, then I get a compilation failure. Here the end user is not supposed to know that the identifier "sentinel" (which is not reserved) is used internally.