|
@@ -0,0 +1,24 @@
|
|
|
+#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 */
|