utils: Add some initial build time assertion macros

These are useful to assert constants during build time. We evaluate the
expression to 0 when valid, so we can safely use the evaluated value.
This commit is contained in:
Martin Willi
2014-08-25 09:48:53 +02:00
parent 8986e2da47
commit bb6be26197
+14
View File
@@ -59,6 +59,20 @@
*/
#define BUF_LEN 512
/**
* Build assertion macro for integer expressions, evaluates to 0
*/
#define BUILD_ASSERT(x) (sizeof(char[(x) ? 0 : -1]))
/**
* Build time check to assert a is an array, evaluates to 0
*
* The address of an array element has a pointer type, which is not compatible
* to the array type.
*/
#define BUILD_ASSERT_ARRAY(a) \
BUILD_ASSERT(!__builtin_types_compatible_p(typeof(a), typeof(&(a)[0])))
/**
* General purpose boolean type.
*/