Thread overview
odd use of preprocessor
Nov 06, 2011
Ellery Newcomer
Nov 06, 2011
Ellery Newcomer
Nov 06, 2011
Michel Fortin
November 06, 2011
poking about in elfutils headers, I've come across the following idiom several times

/* Error values.  */
enum
  {
    DW_TAG_invalid = 0
#define DW_TAG_invalid  DW_TAG_invalid
  };


anyone know if anything strange is going on here that would prevent trivial conversion to d?
November 06, 2011
On 06-11-2011 20:43, Ellery Newcomer wrote:
> poking about in elfutils headers, I've come across the following idiom
> several times
>
> /* Error values.  */
> enum
>    {
>      DW_TAG_invalid = 0
> #define DW_TAG_invalid  DW_TAG_invalid
>    };
>
>
> anyone know if anything strange is going on here that would prevent
> trivial conversion to d?

The only thing I can think of is fully-qualified enums. The #define ensures that you _don't_ have to fully qualify DW_TAG_invalid. But why they would do this (considering C doesn't have this enum feature), I don't know.

- Alex
November 06, 2011
On 11/06/2011 01:50 PM, Alex Rønne Petersen wrote:
> On 06-11-2011 20:43, Ellery Newcomer wrote:
>> poking about in elfutils headers, I've come across the following idiom several times
>>
>> /* Error values.  */
>> enum
>>    {
>>      DW_TAG_invalid = 0
>> #define DW_TAG_invalid  DW_TAG_invalid
>>    };
>>
>>
>> anyone know if anything strange is going on here that would prevent trivial conversion to d?
> 
> The only thing I can think of is fully-qualified enums. The #define ensures that you _don't_ have to fully qualify DW_TAG_invalid. But why they would do this (considering C doesn't have this enum feature), I don't know.
> 
> - Alex

nor c++, right?
November 06, 2011
On 2011-11-06 19:43:15 +0000, Ellery Newcomer <ellery-newcomer@utulsa.edu> said:

> /* Error values.  */
> enum
>   {
>     DW_TAG_invalid = 0
> #define DW_TAG_invalid  DW_TAG_invalid
>   };

It's strange all right. The only reason I can come with is that they want to prevent someone else from defining DW_TAG_invalid as a preprocessor value that would shadow the enum value.

Just ignore it, D has no preprocessor. :-)

-- 
Michel Fortin
michel.fortin@michelf.com
http://michelf.com/

November 07, 2011
On 06-11-2011 21:36, Ellery Newcomer wrote:
> On 11/06/2011 01:50 PM, Alex Rønne Petersen wrote:
>> On 06-11-2011 20:43, Ellery Newcomer wrote:
>>> poking about in elfutils headers, I've come across the following idiom
>>> several times
>>>
>>> /* Error values.  */
>>> enum
>>>     {
>>>       DW_TAG_invalid = 0
>>> #define DW_TAG_invalid  DW_TAG_invalid
>>>     };
>>>
>>>
>>> anyone know if anything strange is going on here that would prevent
>>> trivial conversion to d?
>>
>> The only thing I can think of is fully-qualified enums. The #define
>> ensures that you _don't_ have to fully qualify DW_TAG_invalid. But why
>> they would do this (considering C doesn't have this enum feature), I
>> don't know.
>>
>> - Alex
>
> nor c++, right?

Even C++0x requires you to use 'enum class' for this effect. I assume this is to cope with <some random compiler>'s craziness. But I have no idea, really.

- Alex