CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
assert.h
Go to the documentation of this file.
1#pragma once
2
24
25#include <cx/platform/base.h>
26#include <cx/platform/cpp.h>
27#include <cx/utils/macros/salieri.h>
29#include <stdbool.h>
30
31CX_C_BEGIN
32
39
52typedef int (*dbgAssertCallback)(_In_opt_z_ const char* expr, _In_opt_z_ const char* msg,
53 _In_opt_z_ const char* file, int ln);
54
60
64
65#if DEBUG_LEVEL >= 1
66_no_inline bool _cxAssertFail(_In_opt_z_ const char* expr, _In_opt_z_ const char* msg,
67 _In_z_ const char* file, int ln);
68#else
69_no_inline bool _cxAssertFail(_In_opt_z_ const char* expr, _In_opt_z_ const char* msg);
70#endif
71
72#if DEBUG_LEVEL >= 2
73#define dbgAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
74#define dbgAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
75#define dbgVerify(expr) (!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
76#define dbgVerifyMsg(expr, msg) (!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
77#else
85#define dbgAssert(expr) unused_noeval(expr)
93#define dbgAssertMsg(expr, msg) unused_noeval(expr)
102#define dbgVerify(expr) (!!(expr))
111#define dbgVerifyMsg(expr, msg) (!!(expr))
112#endif
113
114#if DEBUG_LEVEL >= 1
115#define devAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
116#define devAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
117#define devVerify(expr) (!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
118#define devVerifyMsg(expr, msg) (!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
119#define relAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
120#define relAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
121#define devFatalError(msg) _cxAssertFail(NULL, msg, __FILE__, __LINE__)
122#define relFatalError(msg) _cxAssertFail(NULL, msg, __FILE__, __LINE__)
123#elif defined(DIAGNOSTIC)
124#define devAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL))
125#define devAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg))
126#define devVerify(expr) (!!(expr) || _cxAssertFail(#expr, NULL))
127#define devVerifyMsg(expr, msg) (!!(expr) || _cxAssertFail(#expr, msg))
128#define relAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL))
129#define relAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg))
130#define devFatalError(msg) _cxAssertFail(NULL, msg)
131#define relFatalError(msg) _cxAssertFail(NULL, msg)
132#else
140#define devAssert(expr) unused_noeval(expr)
148#define devAssertMsg(expr, msg) unused_noeval(expr)
156#define devVerify(expr) (!!(expr))
165#define devVerifyMsg(expr, msg) (!!(expr))
173#define relAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL))
181#define relAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg))
189#define devFatalError(msg) ((void)0)
197#define relFatalError(msg) _cxAssertFail(NULL, msg)
198#endif
199
200#if defined(DEBUG_LEGACY_ASSERT) && !defined(__INTELLISENSE__)
201#define assert(expr) relAssert(expr)
202#endif
203
205
206CX_C_END
Compiler and platform detection macros.
ASSERT_ACTION_ENUM
Action to take when an assertion fails.
Definition assert.h:34
int(* dbgAssertCallback)(const char *expr, const char *msg, const char *file, int ln)
Definition assert.h:52
void dbgAssertRemoveCallback(dbgAssertCallback cb)
void dbgAssertAddCallback(dbgAssertCallback cb)
@ ASSERT_Crash
Intentionally crash to invoke crash handler or get memory dump.
Definition assert.h:35
@ ASSERT_Ignore
Ignore the failure and continue execution.
Definition assert.h:37
@ ASSERT_Exit
Immediately terminate the process with exit(1)
Definition assert.h:36
Macros for suppressing compiler warnings.