1 /* CC0 (Public domain) - see LICENSE file for details */
2 #ifndef CCAN_BUILD_ASSERT_H
3 #define CCAN_BUILD_ASSERT_H
6 * BUILD_ASSERT - assert a build-time dependency.
7 * @cond: the compile-time condition which must be true.
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.
15 * static char *foo_to_char(struct foo *foo)
17 * // This code needs string to be at start of foo.
18 * BUILD_ASSERT(offsetof(struct foo, string) == 0);
22 #define BUILD_ASSERT(cond) \
23 do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
26 * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
27 * @cond: the compile-time condition which must be true.
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".
33 * #define foo_to_char(foo) \
35 * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
37 #define BUILD_ASSERT_OR_ZERO(cond) \
38 (sizeof(char [1 - 2*!(cond)]) - 1)
40 #endif /* CCAN_BUILD_ASSERT_H */