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.
14 * static char *foo_to_char(struct foo *foo)
16 * // This code needs string to be at start of foo.
17 * BUILD_ASSERT(offsetof(struct foo, string) == 0);
21 #define BUILD_ASSERT(cond) \
22 do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
25 * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
26 * @cond: the compile-time condition which must be true.
28 * Your compile will fail if the condition isn't true, or can't be evaluated
29 * by the compiler. This can be used in an expression: its value is "0".
32 * #define foo_to_char(foo) \
34 * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
36 #define BUILD_ASSERT_OR_ZERO(cond) \
37 (sizeof(char [1 - 2*!(cond)]) - 1)
39 #endif /* CCAN_BUILD_ASSERT_H */