PATCH: Use enum instead of nested macros
Adam Nemet
anemet@caviumnetworks.com
Fri Oct 16 00:40:00 GMT 2009
"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.
Adam
More information about the Binutils
mailing list