On 17/01/17 12:12, vijay nag wrote: > On Tue, Jan 17, 2017 at 4:36 PM, Jonathan Wakely <jwakely.gcc@xxxxxxxxx> wrote: >> 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? > > Thanks for the reply, it is clear now. So, can enum have same name as > that of a macro and Is it allowed in C ? > You can have macros with names that clash with all sorts of things in C, including identifiers and keywords. Usually it's a bad idea, but it's up to you. Macros are just textual substitution - after the #define FOO line, any time the token FOO is found the compiler (pre-processor) pastes in the definition of FOO. And previous uses of the word FOO are lost (unless you get them via other macros).