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
37
50typedef int (*dbgAssertCallback)(_In_opt_z_ const char* expr, _In_opt_z_ const char* msg,
51 _In_opt_z_ const char* file, int ln);
52
58
62
63#if DEBUG_LEVEL >= 1
64CX_C _no_inline bool _cxAssertFail(_In_opt_z_ const char* expr, _In_opt_z_ const char* msg,
65 _In_z_ const char* file, int ln);
66#else
67CX_C _no_inline bool _cxAssertFail(_In_opt_z_ const char* expr, _In_opt_z_ const char* msg);
68#endif
69
70#if DEBUG_LEVEL >= 2
71#define dbgAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
72#define dbgAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
73#define dbgVerify(expr) (!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
74#define dbgVerifyMsg(expr, msg) (!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
75#else
83#define dbgAssert(expr) unused_noeval(expr)
91#define dbgAssertMsg(expr, msg) unused_noeval(expr)
100#define dbgVerify(expr) (!!(expr))
109#define dbgVerifyMsg(expr, msg) (!!(expr))
110#endif
111
112#if DEBUG_LEVEL >= 1
113#define devAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
114#define devAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
115#define devVerify(expr) (!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
116#define devVerifyMsg(expr, msg) (!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
117#define relAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL, __FILE__, __LINE__))
118#define relAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg, __FILE__, __LINE__))
119#define devFatalError(msg) _cxAssertFail(NULL, msg, __FILE__, __LINE__)
120#define relFatalError(msg) _cxAssertFail(NULL, msg, __FILE__, __LINE__)
121#elif defined(DIAGNOSTIC)
122#define devAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL))
123#define devAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg))
124#define devVerify(expr) (!!(expr) || _cxAssertFail(#expr, NULL))
125#define devVerifyMsg(expr, msg) (!!(expr) || _cxAssertFail(#expr, msg))
126#define relAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL))
127#define relAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg))
128#define devFatalError(msg) _cxAssertFail(NULL, msg)
129#define relFatalError(msg) _cxAssertFail(NULL, msg)
130#else
138#define devAssert(expr) unused_noeval(expr)
146#define devAssertMsg(expr, msg) unused_noeval(expr)
154#define devVerify(expr) (!!(expr))
163#define devVerifyMsg(expr, msg) (!!(expr))
171#define relAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL))
179#define relAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg))
187#define devFatalError(msg) ((void)0)
195#define relFatalError(msg) _cxAssertFail(NULL, msg)
196#endif
197
198#if defined(DEBUG_LEGACY_ASSERT) && !defined(__INTELLISENSE__)
199#define assert(expr) relAssert(expr)
200#endif
201
Compiler and platform detection macros.
ASSERT_ACTION_ENUM
Action to take when an assertion fails.
Definition assert.h:32
int(* dbgAssertCallback)(const char *expr, const char *msg, const char *file, int ln)
Definition assert.h:50
void dbgAssertRemoveCallback(dbgAssertCallback cb)
void dbgAssertAddCallback(dbgAssertCallback cb)
@ ASSERT_Crash
Intentionally crash to invoke crash handler or get memory dump.
Definition assert.h:33
@ ASSERT_Ignore
Ignore the failure and continue execution.
Definition assert.h:35
@ ASSERT_Exit
Immediately terminate the process with exit(1)
Definition assert.h:34
Macros for suppressing compiler warnings.