Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
C/C++ custom assertion macros
C++ C
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
COPYING.TXT
README.TXT
xassert.c
xassert.h

README.TXT

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.
Something went wrong with that request. Please try again.