libgphoto2 photo camera library (libgphoto2) API 2.5.29
compiletime-assert.h
Go to the documentation of this file.
1
29#ifndef LIBGPHOTO2_PORT_COMPILETIME_ASSERT_H
30#define LIBGPHOTO2_PORT_COMPILETIME_ASSERT_H
31
32
33#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L))
34/* C11 or later */
35
36#include <assert.h>
37
39#define COMPILETIME_ASSERT(CONDITION) \
40 static_assert((CONDITION), #CONDITION)
41
43#define BARE_COMPILETIME_ASSERT(CONDITION) \
44 static_assert((CONDITION), #CONDITION)
45
46#else
47/* before C11 */
48
50#define COMPILETIME_ASSERT(CONDITION) \
51 switch (0) { /* error here means assertion has failed */ \
52 case 0: /* error here means assertion has failed */ \
53 case (CONDITION): /* error here means assertion has failed */ \
54 break; \
55 }
56
57
59#define MAKE_BARE_COMPILETIME_ASSERT_NAME \
60 MAKE_BARE_COMPILETIME_ASSERT_NAME1(COMPILETIME_ASSERT_fails_in_line, \
61 __LINE__)
62
63
65#define MAKE_BARE_COMPILETIME_ASSERT_NAME1(BASE, PARAM) \
66 MAKE_BARE_COMPILETIME_ASSERT_NAME2(BASE, PARAM)
67
68
70#define MAKE_BARE_COMPILETIME_ASSERT_NAME2(BASE, PARAM) \
71 BASE ## _ ## PARAM
72
73
75#define BARE_COMPILETIME_ASSERT(CONDITION) \
76 void MAKE_BARE_COMPILETIME_ASSERT_NAME(void); \
77 void MAKE_BARE_COMPILETIME_ASSERT_NAME(void) \
78 { \
79 COMPILETIME_ASSERT(CONDITION); \
80 }
81
82#endif /* after/before C11 */
83
84
85#endif /* !defined(LIBGPHOTO2_PORT_COMPILETIME_ASSERT_H) */
86
87/*
88 * Local Variables:
89 * c-file-style:"linux"
90 * indent-tabs-mode:t
91 * End:
92 */