damus

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

build_assert.h (1315B)


      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 */