# <assert.h>
<assert.h>
# ``
* * *
Include the standard header **``**
to define the macro
[`assert`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_assert.html#assert),
which is useful for diagnosing logic errors in
the program. You can eliminate the testing code produced by the macro
`assert` without removing the macro references from the program
by defining the macro
**`NDEBUG`**
in the program before you include
``. Each time the program includes this header,
it redetermines the definition of the macro `assert`.
#undef assert
#if defined NDEBUG
#define assert(test) (void)0
#else
#define assert(test)
#endifCopy to clipboard
## `assert`
#undef assert
#if defined NDEBUG
#define assert(test) (void)0
#else
#define assert(test)
#endifCopy to clipboard
If the *int* expression `test` equals zero,
the macro writes to
[`stderr`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_stdio.html#stderr)
a diagnostic message that includes:
- the text of `test`
- the source filename (the predefined macro
[`__FILE__`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_preproc.html#__FILE__))
- the source line number (the predefined macro
[`__LINE__`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_preproc.html#__LINE__))
It then calls
[`abort`](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_stdlib.html#abort).
You can write the macro `assert` in the program in any
[side-effects context](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_function.html#side-effects%20context).
* * *
See also the
**[Table of Contents](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_index.html#Table%20of%20Contents)** and the
**[Index](https://docs.qualcomm.com/doc/80-N3040-23/topic/_cpp_index.html)**.
*[Copyright](https://docs.qualcomm.com/doc/80-N3040-23/topic/cpp_crit_pjp.html) © 1992-2006by P.J. Plauger and Jim Brodie. All rights reserved.*
Last Published: Oct 06, 2026
Previous Topic
Next Topic