9.2. Diagnostics
While you are debugging programs, it is often useful to
check that the value of an expression is the one that you
expected. The assert
function provides such a diagnostic
aid.
In order to use assert
you must first include the header
file <assert.h>
. The function is defined as
#include <assert.h> void assert(int expression)
If the expression evaluates to zero (i.e. false) then
assert
will write a message about the failing expression,
including the name of the source file, the line at which the
assertion was made and the expression itself. After this,
the abort
function is called, which will halt the program.
assert(1 == 2); /* Might result in */ Assertion failed: 1 == 2, file silly.c, line 15
Assert
is actually defined as a macro, not as a real
function. In order to disable assertions when a program is
found to work satisfactorily, defining the name NDEBUG
before including <assert.h>
will disable
assertions totally.
You should beware of side effects that the expression may
have: when assertions are turned off with NDEBUG
, the
expression is not evaluated. Thus the following example will
behave unexpectedly when debugging is turned off with the
#define NDEBUG
.
#define NDEBUG #include <assert.h> void func(void) { int c; assert((c = getchar()) != EOF); putchar(c); }Example 9.2
Note that assert returns no value.