[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <AANLkTinU9nWTW9nJeGYQ9YJKbSzWn2SK7BjXPx_JZ-0w@mail.gmail.com>
Date: Mon, 31 Jan 2011 18:22:57 +0100
From: Geert Uytterhoeven <geert@...ux-m68k.org>
To: Sri Ram Vemulpali <sri.ram.gmu06@...il.com>
Cc: Kernel-newbies <kernelnewbies@...linux.org>,
linux-kernel-mail <linux-kernel@...r.kernel.org>
Subject: Re: typecheck code
On Mon, Jan 31, 2011 at 18:03, Sri Ram Vemulpali
<sri.ram.gmu06@...il.com> wrote:
> Hi all,
>
> /*
> * Check at compile time that something is of a particular type.
> * Always evaluates to 1 so you may use it easily in comparisons.
> */
> #define typecheck(type,x) \
> ({ type __dummy; \
> typeof(x) __dummy2; \
> (void)(&__dummy == &__dummy2); \
> 1; \
> })
>
> #define typecheck_fn(type,function) \
> ({ typeof(type) __tmp = function; \
> (void)__tmp; \
> })
>
> Can anyone help me, explain the above code typecheck. How does
> (void)(&__dummy == &__dummy2) evaluates to 1
It does not rely on the equation evaluating to 1. That result is
expicitly unused,
witness the cast to void.
It does rely on gcc complaining if you compare two pointers that don't
point to the same type.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@...ux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists