A query about typeof
Dave Hylands
dhylands at gmail.com
Sat Dec 24 16:31:55 EST 2011
Hi ctmzb,
On Sat, Dec 24, 2011 at 10:34 AM, contemplating zombie
<contemplatingzombie at gmail.com> wrote:
> Hi,
>
> I see following code in kfifo.h
>
> typeof((fifo) + 1) __tmp = (fifo);
> [http://lxr.linux.no/linux+v3.1.6/include/linux/kfifo.h#L334]
>
> I do not understand this specific code construct. Why is it necessary
> to add 1 to fifo before getting its type?
> Is it related to some 'C' magic?
This has to do with the difference between arrays and pointers.
int *x;
int y[5];
have different types. y by itself has an array type. y + 1 is the same
as &y[1] which has an int * type.
If we assume that an int is 32 bits and an int * is 32 bits then
sizeof( typeof( x )) = 4
sizeof( typeof( y )) = 20
sizeof( typeof( (x) + 1 ) = 4
sizeof( typeof( (y) + 1 ) = 4
--
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com
More information about the Kernelnewbies
mailing list