#ifndef TYPECHECK_H_INCLUDED | |
#define TYPECHECK_H_INCLUDED | |
/* | |
* 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; \ | |
}) | |
/* | |
* Check at compile time that 'function' is a certain type, or is a pointer | |
* to that type (needs to use typedef for the function type.) | |
*/ | |
#define typecheck_fn(type,function) \ | |
({ typeof(type) __tmp = function; \ | |
(void)__tmp; \ | |
}) | |
#endif /* TYPECHECK_H_INCLUDED */ |