This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: enum and macro collision
- From: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- To: vijay nag <vijunag at gmail dot com>
- Cc: "gcc-help at gcc dot gnu dot org" <gcc-help at gcc dot gnu dot org>
- Date: Tue, 17 Jan 2017 11:06:58 +0000
- Subject: Re: enum and macro collision
- Authentication-results: sourceware.org; auth=none
- References: <CAKhyrx8qVfNmyHPEb1RGH=x=japHc__HQPFG3yoiu7N_6tVP5Q@mail.gmail.com>
On 17 January 2017 at 11:03, vijay nag wrote:
> Hello Gcc,
>
> I came across this nasty C code of an enumerator and a macro having
> the same name. Although this is a buggy code, I found it surprising
> that GCC compiles in one of the cases(snippet 1) while in the other
> compiler flags an error(snippet 2). Would be interested to know why
> the order of definitions/declarations matter and what C standards the
> compiler is adhering to ?
Just look at the preprocessed code, it should be obvious.
Macros aren't defined until they're defined.
When the macro is defined after the enumerator it can't change it and
you get a valid enumerator definition, FOO = 1.
When the macro is defined earlier it produces an invalid enumerator,
0xDEADBEEF = 1
What isn't clear?