Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/kern



On Jan 31, 2012, at 3:53 PM, Alexander Nasonov wrote:
> David Laight wrote:
>> I don't believe there is a problem using m[0], just m[non-constant-expr].
> 
> Practically speaking, m[0] is not a problem but the standard says
> 
> ... to the structure member (designated by member-designator), ...
>                     ^^^^^^
> 
>> OTOH 'sizeof (s *)0->m[0]' might be deemed invalid (because it has
>> an inferred dereference of NULL.
> 
> Oh yes. I can change it to:
> 
> extern void *foo(void);
> 
> and then sizeof(((s *)foo())->m[0]) but NULL should work too.
> 
> So, if we reached a consensus on this, where should I add the macro?

There's no NULL dereference, so it is fine (completely standards conforming).  
The sizeof operator is a compile time construct that evaluates its argument for 
its type only, so no dereference is happening, so any value for the pointer is 
OK.  In the absence of a local variable, 0 is just as valid as anything else.

Warner



Home | Main Index | Thread Index | Old Index