|
CX Framework
Cross-platform C utility framework
|
Macros | |
| #define | dbgAssert(expr) unused_noeval(expr) |
| #define | dbgAssertMsg(expr, msg) unused_noeval(expr) |
| #define | dbgVerify(expr) (!!(expr)) |
| #define | dbgVerifyMsg(expr, msg) (!!(expr)) |
| #define | devAssert(expr) unused_noeval(expr) |
| #define | devAssertMsg(expr, msg) unused_noeval(expr) |
| #define | devVerify(expr) (!!(expr)) |
| #define | devVerifyMsg(expr, msg) (!!(expr)) |
| #define | relAssert(expr) (void)(!!(expr) || _cxAssertFail(#expr, NULL)) |
| #define | relAssertMsg(expr, msg) (void)(!!(expr) || _cxAssertFail(#expr, msg)) |
| #define | devFatalError(msg) ((void)0) |
| #define | relFatalError(msg) _cxAssertFail(NULL, msg) |
Typedefs | |
| typedef int(* | dbgAssertCallback) (const char *expr, const char *msg, const char *file, int ln) |
Enumerations | |
| enum | ASSERT_ACTION_ENUM { ASSERT_Crash = 0 , ASSERT_Exit , ASSERT_Ignore } |
| Action to take when an assertion fails. More... | |
Functions | |
| void | dbgAssertAddCallback (dbgAssertCallback cb) |
| void | dbgAssertRemoveCallback (dbgAssertCallback cb) |
Runtime assertions with configurable failure behavior.
CX provides multiple levels of assertions that compile to different behavior based on DEBUG_LEVEL:
Assertion variants:
All assertion failures trigger registered callbacks before taking action.
| #define dbgAssert | ( | expr | ) | unused_noeval(expr) |
Debug assertion - only active when DEBUG_LEVEL >= 2
void dbgAssert(expr)
Evaluates expression and triggers assertion failure if false. Compiled out completely in dev/release builds.
| expr | Expression to evaluate |
| #define dbgAssertMsg | ( | expr, | |
| msg | |||
| ) | unused_noeval(expr) |
Debug assertion with message - only active when DEBUG_LEVEL >= 2
Like dbgAssert but includes a custom message in the failure report.
| expr | Expression to evaluate |
| msg | String literal message to include on failure |
| #define dbgVerify | ( | expr | ) | (!!(expr)) |
Debug verify - only active when DEBUG_LEVEL >= 2
bool dbgVerify(expr)
Like dbgAssert but returns the boolean result of the expression. Useful when the expression result is needed in the calling code.
| expr | Expression to evaluate |
| #define dbgVerifyMsg | ( | expr, | |
| msg | |||
| ) | (!!(expr)) |
Debug verify with message - only active when DEBUG_LEVEL >= 2
Like dbgVerify but includes a custom message in the failure report.
| expr | Expression to evaluate |
| msg | String literal message to include on failure |
| #define devAssert | ( | expr | ) | unused_noeval(expr) |
Development assertion - active when DEBUG_LEVEL >= 1
void devAssert(expr)
Evaluates expression and triggers assertion failure if false. Active in debug and dev builds, compiled out in release builds.
| expr | Expression to evaluate |
| #define devAssertMsg | ( | expr, | |
| msg | |||
| ) | unused_noeval(expr) |
Development assertion with message - active when DEBUG_LEVEL >= 1
Like devAssert but includes a custom message in the failure report.
| expr | Expression to evaluate |
| msg | String literal message to include on failure |
| #define devFatalError | ( | msg | ) | ((void)0) |
Development fatal error - active when DEBUG_LEVEL >= 1
void devFatalError(msg)
Immediately triggers assertion failure with a message. Active in debug and dev builds, compiled out in release builds.
| msg | String literal error message |
| #define devVerify | ( | expr | ) | (!!(expr)) |
Development verify - active when DEBUG_LEVEL >= 1
bool devVerify(expr)
Like devAssert but returns the boolean result of the expression.
| expr | Expression to evaluate |
| #define devVerifyMsg | ( | expr, | |
| msg | |||
| ) | (!!(expr)) |
Development verify with message - active when DEBUG_LEVEL >= 1
Like devVerify but includes a custom message in the failure report.
| expr | Expression to evaluate |
| msg | String literal message to include on failure |
| #define relAssert | ( | expr | ) | (void)(!!(expr) || _cxAssertFail(#expr, NULL)) |
Release assertion - always active
void relAssert(expr)
Evaluates expression and triggers assertion failure if false. Active in all build types. Use sparingly for critical invariants.
| expr | Expression to evaluate |
| #define relAssertMsg | ( | expr, | |
| msg | |||
| ) | (void)(!!(expr) || _cxAssertFail(#expr, msg)) |
Release assertion with message - always active
Like relAssert but includes a custom message in the failure report.
| expr | Expression to evaluate |
| msg | String literal message to include on failure |
| #define relFatalError | ( | msg | ) | _cxAssertFail(NULL, msg) |
Release fatal error - always active
void relFatalError(msg)
Immediately triggers assertion failure with a message. Active in all build types.
| msg | String literal error message |
| typedef int(* dbgAssertCallback) (const char *expr, const char *msg, const char *file, int ln) |
Callback function invoked when an assertion fails
| expr | The failed expression as a string (may be NULL for FatalError) |
| msg | Optional message provided with the assertion (may be NULL) |
| file | Source file where assertion failed (NULL in release builds with DEBUG_LEVEL == 0) |
| ln | Line number where assertion failed |
Callbacks are invoked before the default failure action. If multiple callbacks are registered, they are called in order. If any callback returns ASSERT_Crash or ASSERT_Exit, that action is taken immediately. Otherwise, the last callback's return value determines the action.
| enum ASSERT_ACTION_ENUM |
| void dbgAssertAddCallback | ( | dbgAssertCallback | cb | ) |
Register a callback to be invoked on assertion failure
| cb | Callback function to add |
Callbacks are deduplicated - adding the same callback multiple times has no effect.
| void dbgAssertRemoveCallback | ( | dbgAssertCallback | cb | ) |
Unregister a previously registered assertion callback
| cb | Callback function to remove |