1 #ifndef CCAN_BUILD_ASSERT_H
2 #define CCAN_BUILD_ASSERT_H
5 * BUILD_ASSERT - assert a build-time dependency.
6 * @cond: the compile-time condition which must be true.
8 * Your compile will fail if the condition isn't true, or can't be evaluated
9 * by the compiler. This can only be used within a function.
12 * char *foo_to_char(struct foo *foo)
14 * // This code needs string to be at start of foo.
15 * BUILD_ASSERT(offsetof(struct foo, string) == 0);
19 #define BUILD_ASSERT(cond) \
20 do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
23 * EXPR_BUILD_ASSERT - assert a build-time dependency, as an expression.
24 * @cond: the compile-time condition which must be true.
26 * Your compile will fail if the condition isn't true, or can't be evaluated
27 * by the compiler. This can be used in an expression: its value is "0".
30 * #define foo_to_char(foo) \
32 * + EXPR_BUILD_ASSERT(offsetof(struct foo, string) == 0))
34 #define EXPR_BUILD_ASSERT(cond) \
35 (sizeof(char [1 - 2*!(cond)]) - 1)
37 #endif /* CCAN_BUILD_ASSERT_H */