PATCH: Use enum instead of nested macros

H.J. Lu hjl.tools@gmail.com
Fri Oct 16 01:00:00 GMT 2009


2009/10/15 Adam Nemet <anemet@caviumnetworks.com>:
> "H.J. Lu" <hjl.tools@gmail.com> writes:
>> On Thu, Oct 15, 2009 at 4:46 PM, David Daney <ddaney@caviumnetworks.com> wrote:
>>> H.J. Lu wrote:
>>>>
>>>> I am checking in this patch to use enum instead of nested macros.
>>>
>>> [...]
>>>>
>>>> +enum
>>>> +{
>>>> +  REG_80 = 0,
>>>> +  REG_81 = REG_80 + 1,
>>>> +  REG_82 = REG_81 + 1,
>>>
>>> Am I missing something, or is every single one of your ' = foo + 1' in this
>>> patch completely redundant?
>>
>> Do all compiler guarantee that bar == 1 with
>>
>> enum
>> {
>>   foo = 0,
>>   bar
>> };
>>
>> If yes, I'd love to get rid of "foo + 1".
>
> Yes.  6.7.2.2#3:
>
>  The identifiers in an enumerator list are declared as constants that
>  have type int and may appear wherever such are permitted.107) An
>  enumerator with = defines its enumeration constant as the value of the
>  constant expression. If the first enumerator has no =, the value of
>  its enumeration constant is 0. Each subsequent enumerator with no =
>  defines its enumeration constant as the value of the constant
>  expression obtained by adding 1 to the value of the previous
>  enumeration constant. (The use of enumerators with = may produce
>  enumeration constants with values that duplicate other values in the
>  same enumeration.) The enumerators of an enumeration are also known as
>  its members.
>

Great. I will make the change.

Thanks.


-- 
H.J.



More information about the Binutils mailing list