1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24: #ifdef _ASSERT_H
25:
26: # undef _ASSERT_H
27: # undef assert
28: # undef __ASSERT_VOID_CAST
29:
30: # ifdef __USE_GNU
31: # undef assert_perror
32: # endif
33:
34: #endif
35:
36: #define _ASSERT_H 1
37: #include <features.h>
38:
39: #if defined __cplusplus && __GNUC_PREREQ (2,95)
40: # define __ASSERT_VOID_CAST static_cast<void>
41: #else
42: # define __ASSERT_VOID_CAST (void)
43: #endif
44:
45:
46:
47:
48:
49:
50: #ifdef NDEBUG
51:
52: # define assert(expr) (__ASSERT_VOID_CAST (0))
53:
54:
55:
56:
57:
58:
59:
60: # ifdef __USE_GNU
61: # define assert_perror(errnum) (__ASSERT_VOID_CAST (0))
62: # endif
63:
64: #else
65:
66: __BEGIN_DECLS
67:
68:
69: extern void __assert_fail (__const char *__assertion, __const char *__file,
70: unsigned int __line, __const char *__function)
71: __THROW __attribute__ ((__noreturn__));
72:
73:
74: extern void __assert_perror_fail (int __errnum, __const char *__file,
75: unsigned int __line,
76: __const char *__function)
77: __THROW __attribute__ ((__noreturn__));
78:
79:
80:
81:
82: extern void __assert (const char *__assertion, const char *__file, int __line)
83: __THROW __attribute__ ((__noreturn__));
84:
85:
86: __END_DECLS
87:
88: # define assert(expr) \
89: ((expr) \
90: ? __ASSERT_VOID_CAST (0) \
91: : __assert_fail (__STRING(expr), __FILE__, __LINE__, __ASSERT_FUNCTION))
92:
93: # ifdef __USE_GNU
94: # define assert_perror(errnum) \
95: (!(errnum) \
96: ? __ASSERT_VOID_CAST (0) \
97: : __assert_perror_fail ((errnum), __FILE__, __LINE__, __ASSERT_FUNCTION))
98: # endif
99:
100:
101:
102:
103:
104:
105: # if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4)
106: # define __ASSERT_FUNCTION __PRETTY_FUNCTION__
107: # else
108: # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
109: # define __ASSERT_FUNCTION __func__
110: # else
111: # define __ASSERT_FUNCTION ((__const char *) 0)
112: # endif
113: # endif
114:
115: #endif