typecheck code

Rajat Sharma fs.rajat at gmail.com
Mon Jan 31 12:44:20 EST 2011


> Can anyone help me, explain the above code typecheck. How does
> (void)(&__dummy == &__dummy2) evaluates to 1

Its not this comparison getting evaluated to 1, but last expression
"1; \" which is forcibly returning 1 in every case. Since it is just
compile time warning and should not effect the program execution, this
macro is always returning 1 at run time. To me it just valuable for
coding style where you do some action only if type matches, but in
real sense you take action anyways.

Rajat

On Mon, Jan 31, 2011 at 10:33 PM, Sri Ram Vemulpali
<sri.ram.gmu06 at gmail.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
>
> I appreciate any explain.
>
> --
> Regards,
> Sri.
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>



More information about the Kernelnewbies mailing list