/xassert

C/C++ custom assertion macros

Primary LanguageC++Creative Commons Zero v1.0 UniversalCC0-1.0

xassert is a set of C/C++ custom assertion macros. To use them, include stdlib.h
or cstdlib followed by xassert.h and call ASSERT, DASSERT, XASSERT or
set_assert_handler from your code.

ASSERT takes one argument and is a macro that will always check the expression
passed to it. If the expression evaluates to false, it will run the assertion
handler. If the assertion handler returns true, it will halt the program by
calling abort(3).

DASSERT is a macro that does the same except that it will be a no-op if NDEBUG
is defined, like standard assert(3). The assert expression will only be
evaluated in debug environments.

XASSERT is a macro similar to ASSERT but it takes an extra argument that should
be a diagnostic message to be printed when the assertion fails.

set_assert_handler() is a function that allows users to pick their own assertion
handler different from the default provided one. Assertion handlers should
conform to the following prototype:

int (*f)(const char *expr, const char *file, int line, const char *msg);

expr is the expression to be asserted. file and line are the file name and line
number where the assertion is being checked, respectively. msg is a string with
a diagnostic message, which may be the null pointer.

The default assertion handler will print the expression, line number, file name
and optional diagnostic message to standard error and return true so the program
is aborted. The value returned from set_assert_handler() is the old assertion
handler function in case it needs to be restored.

set_assert_handler() is NOT reentrant.

All this code is released to the public domain under the terms of the CC0
license. Please, see the COPYING.TXT file for more details.