coding
Eric W. Biederman
ebiederman at lnxi.com
Tue Sep 2 15:25:01 CEST 2003
ron minnich <rminnich at lanl.gov> writes:
> anybody object to anonymous enums? I've gotten used to them in Plan 9 and
> like them. Instead of this:
>
> #define FLOPPY_DEVICE 0
> #define PARALLEL_DEVICE 1
> #define COM2_DEVICE 2
> #define COM1_DEVICE 3
> #define SWC_DEVICE 4
> #define MOUSE_DEVICE 5
> #define KBC_DEVICE 6
> #define GPIO_DEVICE 7
> #define ACB_DEVICE 8
> #define FSCM_DEVICE 9
> #define WDT_DEVICE 10
>
> you get this:
> enum {
> FLOPPY_DEVICE=0,
> PARALLEL_DEVICE,
> COM2_DEVICE,
> COM1_DEVICE,
> SWC_DEVICE,
> MOUSE_DEVICE,
> KBC_DEVICE,
> GPIO_DEVICE,
> ACB_DEVICE,
> FSCM_DEVICE,
> WDT_DEVICE
> };
>
> The advantages I see
> - somewhat less prone to error
> - looks nicer
> - the big one: enums are first-class objects to the compiler, and
> #defines are pertty much ripped out by the compiler and disappear
> into constant numbers.
I have no strong preference, but I am used to using defines.
In this case as these numbers are magic constants not an enumeration,
so I think an enumeration is much more likely to be error prone. Those
are the logical device numbers on the superio chip, and they cannot.
Beyond which before I start using enums very much I want to get them
implemented in romcc. Those and constant pointers are some of the last
missing features, that can reasonably be added. After that I could
look at compiling static.c with romcc....
The one thing I do get grumpy about are less then 8 space indents, so
I would get:
enum {
FLOPPY_DEVICE=0,
PARALLEL_DEVICE,
COM2_DEVICE,
COM1_DEVICE,
SWC_DEVICE,
MOUSE_DEVICE,
KBC_DEVICE,
GPIO_DEVICE,
ACB_DEVICE,
FSCM_DEVICE,
WDT_DEVICE
};
It's pretty much a case of if you are going to use whitespace you might
as well use enough of it that you can see.
For this case though I am pretty certain that enums are more error prone
as the encourage the myth that you can change the value.
Eric
More information about the coreboot
mailing list