Assert.h

Header file for C programs


title: "Assert.h" type: doc version: 1 created: 2026-02-28 author: "Wikipedia contributors" status: active scope: public tags: ["c-standard-library-headers"] description: "Header file for C programs" topic_path: "general/c-standard-library-headers" source: "https://en.wikipedia.org/wiki/Assert.h" license: "CC BY-SA 4.0" wikipedia_page_id: 0 wikipedia_revision_id: 0

::summary Header file for C programs ::

**** is a header file in the C standard library. It defines the C preprocessor macro and implements runtime assertion in C.

is defined in ANSI C as part of the C standard library. In the C++ programming language, and are available; both are functionally equivalent.

Use

The macro implements runtime assertion. If the expression within it is false, the macro will print a message to [stderr](stderr) and call [abort()](c-process-control-abort), defined in . The message includes the source filename and the source line number from the macros and , respectively. Since C99, the name of the function the assert statement is included as () and the expression itself. In ANSI C, the expression in the macro is defined as signed integer, although any expression that can be implicitly cast to a signed integer may be used. In C99, the macro explicitly allows any scalar type. Two common uses of the macro are to assert that a pointer is not null and to ensure that an array index is in-bounds.

Below is a program using the macro. This program will always evaluate as false, as is a null pointer and does not point to a valid memory location: ::code[lang=c] #include <assert.h> #include <stddef.h>

int main() { void* ptr = NULL; assert(ptr); return 0; } ::

Upon compiling the program and running it, a message similar to the following will be output: ::code[lang=output] program: source.c:5: main: Assertion 'ptr' failed. Aborted (core dumped) ::

The definition of the macro changes depending on the definition of another macro, . If is defined as a macro name, the macro is defined as , thus resulting in the macro not evaluating the expression. The use of may affect the overall behavior of a program if one or more statements contain side effects, as these statements are not evaluated.

The macro does not include an error message. However the comma operator can be used to add it to the printed expression, as in .

{{mono|static_assert}}

The keyword, added in C++11, serves a similar purpose to the macro. Unlike the macro, runs at compile-time rather than at runtime. The original implementation used template hacks. The keyword takes in a constant expression that can be converted into a Boolean and a string literal; if the expression fails, the string literal is returned, otherwise, the assertion has no effect. In C++17, this assertion failure message was made optional, and the subsequent message is omitted if not specified.

In C11, the functionally equivalent declaration was added. defines as an alias for to ensure parity with C++. In C23, was renamed to and the string literal argument was made optional. Gnulib defines for platforms that do not use C11 and does not require to be included.

{{mono|contract_assert}}

The keyword, added in C++26, is for contract assertions and used to verify internal conditions similar to the assert() macro by ensuring that a condition holds during execution. ::code[lang=cpp] int f(vector

Other languages

In Java, assert is a keyword.

In C#, there is no assertion macro or keyword, but instead classes System.Diagnostics.Debug and System.Diagnostics.Trace which provide Assert() methods.

In Rust, there is an assert!() macro.

References

Citations

Bibliography

References

  1. (August 25, 2002). "Linux Programmer's Manual".
  2. Reekie, John. (December 7, 1995). "How to use assertions in C". [[University of California, Berkeley]].
  3. (February 6, 2023). "GNU Gnulib". [[Free Software Foundation]].
  4. Joshua Berne, Timur Doumler, Andrzej Krzemieński. (13 February 2025). "Contracts for C++". WG 22.
  5. "Contract assertions (since C++26)". cppreference.

::callout[type=info title="Wikipedia Source"] This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page. ::

c-standard-library-headers