# assert

From cppreference.com
< c‎ | error

Defined in header `<assert.h>` |  |
#ifdef NDEBUG #define assert(condition) ((void)0) #else #define assert(condition) /*implementation defined*/ #endif |  |

The definition of the macro `assert` depends on another macro, NDEBUG, which is not defined by the standard library.

If NDEBUG is defined as a macro name at the point in the source code where `<assert.h>` is included, then `assert` does nothing.

If NDEBUG is not defined, then `assert` checks if its argument (which must have scalar type) compares equal to zero. If it does, `assert` outputs implementation-specific diagnostic information on the standard error output and calls abort(). The diagnostic information is required to include the text of `expression`, as well as the values of the standard macros __FILE__, __LINE__, and the predefined variable __func__. (since C99)

### Parameters

condition | - | expression of scalar type

### Return value

(none)

### Example

Run this code

    #include <stdio.h>
    // uncomment to disable assert()
    // #define NDEBUG
    #include <assert.h>
    #include <math.h>

    int main(void)
    {
        double x = -1.0;
        assert(x >= 0.0);
        printf("sqrt(x) = %f\n", sqrt(x));

        return 0;
    }

Output:

    output with NDEBUG not defined:
    a.out: main.cpp:10: main: Assertion `x >= 0.0' failed.

    output with NDEBUG defined:
    sqrt(x) = -nan

### References

- C11 standard (ISO/IEC 9899:2011):

  - 7.2.1.1 The assert macro (p: 186-187)

- C99 standard (ISO/IEC 9899:1999):

  - 7.2.1.1 The assert macro (p: 169)

- C89/C90 standard (ISO/IEC 9899:1990):

  - 4.2.1.1 The assert macro

### See also

abort | causes abnormal program termination (without cleaning up) (function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/error/assert&oldid=78721"