On Mon, 2006-01-30 at 17:53 +0000, Keir Fraser wrote:
> On 30 Jan 2006, at 17:38, Dave Hansen wrote:
> > Yes, they are. Buuuuuuut, you _can_ make the code around them a little
> > less evil. If you _must_ use a typedef, you could do something like
> > this:
> > #define XEN_CAP_INFO_LEN_BYTES 1024
> > typedef char [XEN_CAP_INFO_LEN_BYTES] xen_capabilities_info_t;
> Is that really better than just referencing the typedef? I've always
> considered them okay for simple scalar and array types, even if they
> are to be avoided for structure types.
One reason they're "evil" is that they hide what is going on. It is
worse for structures, but doing it for arrays still hides what is there,
and a hapless programmer can easily jump off the end of the stack
without realizing it. I think the kernel style is to be as explicit as
possible, especially when it isn't too verbose.
In this case, I expect a programmer declaring a 'char foo[XEN_FOO]'
array on the stack to be much more likely to go look up how big XEN_FOO
is than one who sees a 'xen_capabilities_info_t foo'.
> Is it the size aspect that is
> the problem (e.g., a typedef'ed type should be okay to allocate on the
The size is the issue. A typedef just makes it a little bit harder to
track down. That's why typedefs are evil. ;)
Xen-devel mailing list