August said:
Then the problem may have no solution, depending on how you interpret
the question from the original poster.
I don't see an interpretation that would make me think that use of
#define was called for, much less that it was mandatory. It seemed clear
to me that the underscores were meant to indicate a blank that was to be
filled in, not a C identifier which was to be #defined.
Which additional options do GCC need in order to tell me this?
As far as I know, there is no GCC option which identifies this problem.
Since the behavior is undefined, diagnosis is not required, so this does
not prevent gcc from conforming.
The reason why certain identifiers are reserved for the implementation
is so that that implementation can give those identifiers an
implementation-specific meaning, one that code written by knowledgeable
users might, in some cases, take advantage of. As a result, it might not
even make any sense for the compiler to diagnose it.
I think that a good compiler should diagnose any use of any reserved
identifier that it doesn't attach it's own special meaning to, but
that's a matter of QoI, and I'm not sure whether any real compiler does
this.