damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

build_assert.h (1228B)


      1 /* CC0 (Public domain) - see LICENSE file for details */
      2 #ifndef CCAN_BUILD_ASSERT_H
      3 #define CCAN_BUILD_ASSERT_H
      4 
      5 /**
      6  * BUILD_ASSERT - assert a build-time dependency.
      7  * @cond: the compile-time condition which must be true.
      8  *
      9  * Your compile will fail if the condition isn't true, or can't be evaluated
     10  * by the compiler.  This can only be used within a function.
     11  *
     12  * Example:
     13  *	#include <stddef.h>
     14  *	...
     15  *	static char *foo_to_char(struct foo *foo)
     16  *	{
     17  *		// This code needs string to be at start of foo.
     18  *		BUILD_ASSERT(offsetof(struct foo, string) == 0);
     19  *		return (char *)foo;
     20  *	}
     21  */
     22 #define BUILD_ASSERT(cond) \
     23 	do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
     24 
     25 /**
     26  * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
     27  * @cond: the compile-time condition which must be true.
     28  *
     29  * Your compile will fail if the condition isn't true, or can't be evaluated
     30  * by the compiler.  This can be used in an expression: its value is "0".
     31  *
     32  * Example:
     33  *	#define foo_to_char(foo)					\
     34  *		 ((char *)(foo)						\
     35  *		  + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
     36  */
     37 #define BUILD_ASSERT_OR_ZERO(cond) \
     38 	(sizeof(char [1 - 2*!(cond)]) - 1)
     39 
     40 #endif /* CCAN_BUILD_ASSERT_H */