root/ccan/build_assert/build_assert.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


/* CC0 (Public domain) - see ccan/licenses/CC0 file for details */
#ifndef CCAN_BUILD_ASSERT_H
#define CCAN_BUILD_ASSERT_H

/**
 * BUILD_ASSERT - assert a build-time dependency.
 * @cond: the compile-time condition which must be true.
 *
 * Your compile will fail if the condition isn't true, or can't be evaluated
 * by the compiler.  This can only be used within a function.
 *
 * Example:
 *      #include <stddef.h>
 *      ...
 *      static char *foo_to_char(struct foo *foo)
 *      {
 *              // This code needs string to be at start of foo.
 *              BUILD_ASSERT(offsetof(struct foo, string) == 0);
 *              return (char *)foo;
 *      }
 */
#define BUILD_ASSERT(cond) \
        do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)

/**
 * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
 * @cond: the compile-time condition which must be true.
 *
 * Your compile will fail if the condition isn't true, or can't be evaluated
 * by the compiler.  This can be used in an expression: its value is "0".
 *
 * Example:
 *      #define foo_to_char(foo)                                        \
 *               ((char *)(foo)                                         \
 *                + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
 */
#define BUILD_ASSERT_OR_ZERO(cond) \
        (sizeof(char [1 - 2*!(cond)]) - 1)

#endif /* CCAN_BUILD_ASSERT_H */

/* [previous][next][first][last][top][bottom][index][help] */