D.9. Assertions
The assert macro—defined in the <cassert> header file—tests the value of an expression. If the value of
the expression is 0 (false), then assert prints an error message and calls function abort
(of the general utilities library—<cstdlib>) to terminate program execution. This is a useful debugging
tool for testing whether a variable has a correct value. For example, suppose
variable x should never be larger than 10 in a program. An assertion may be used to test the value of
x and print an error message if the value of
x is incorrect. The statement would be
If x is greater than 10 when the preceding statement is encountered in a
program, an error message containing the line number and file name is printed,
and the program terminates. You may then concentrate on this area of the code to
find the error. If the symbolic constant NDEBUG
is defined, subsequent assertions will be ignored. Thus, when assertions are no
longer needed (i.e., when debugging is complete), we insert the line
in the program file rather than deleting
each assertion manually. As with the DEBUG symbolic constant,
NDEBUG is often set by compiler command-line
options or through a setting in the IDE.
Most C++ compilers now include
exception handling. C++ programmers prefer using exceptions rather than
assertions. But assertions are still valuable for C++ programmers who work with
C legacy code.