Assert.h
Encyclopedia
assert.h is a header file
in the standard library
of the C programming language that defines the C preprocessor
macro
, which can be used to verify assumptions made by the program and print a diagnostic message if this assumption is false. In C++ it is also available through the cassert header file.
When executed, if the expression is false (that is, compares equal to 0),
Example output of a program compiled with gcc
on Linux:
program: program.c:5: main: Assertion `a != 1' failed.
Abort (core dumped)
Programmers can eliminate the assertions without changing the source code:
if the macro NDEBUG is defined before the inclusion of
#define assert(ignore)((void) 0)
and therefore has no effect on the program, not even evaluating its argument. Therefore expressions passed to
assert(x = gets);
will not read a line and not assign to x when debugging is disabled.
Header file
Some programming languages use header files. These files allow programmers to separate certain elements of a program's source code into reusable files. Header files commonly contain forward declarations of classes, subroutines, variables, and other identifiers...
in the standard library
C standard library
The C Standard Library is the standard library for the programming language C, as specified in the ANSI C standard.. It was developed at the same time as the C POSIX library, which is basically a superset of it...
of the C programming language that defines the C preprocessor
C preprocessor
The C preprocessor is the preprocessor for the C and C++ computer programming languages. The preprocessor handles directives for source file inclusion , macro definitions , and conditional inclusion ....
macro
assert
. The macro implements an assertionAssertion (computing)
In computer programming, an assertion is a predicate placed in a program to indicate that the developer thinks that the predicate is always true at that place.For example, the following code contains two assertions:...
, which can be used to verify assumptions made by the program and print a diagnostic message if this assumption is false. In C++ it is also available through the cassert header file.
When executed, if the expression is false (that is, compares equal to 0),
assert
writes information about the call that failed on stderr
and then calls abortAbort (computing)In a computer or data transmission system, to abort means to terminate, usually in a controlled manner, a processing activity because it is impossible or undesirable for the activity to proceed. Such an action may be accompanied by diagnostic information on the aborted process.In addition to being...
. The information it writes to stderr
includes:
- the source filename (the predefined macro
__FILE__
) - the source line number (the predefined macro
__LINE__
) - the source function (the predefined identifier
__func__
) (added in C99C99C99 is a modern dialect of the C programming language. It extends the previous version with new linguistic and library features, and helps implementations make better use of available computer hardware and compiler technology.-History:...
) - the text of expression that evaluated to 0
Example output of a program compiled with gcc
GNU Compiler Collection
The GNU Compiler Collection is a compiler system produced by the GNU Project supporting various programming languages. GCC is a key component of the GNU toolchain...
on Linux:
program: program.c:5: main: Assertion `a != 1' failed.
Abort (core dumped)
Programmers can eliminate the assertions without changing the source code:
if the macro NDEBUG is defined before the inclusion of
, the assert
macro is defined simply as:#define assert(ignore)((void) 0)
and therefore has no effect on the program, not even evaluating its argument. Therefore expressions passed to
assert
must not contain side-effects since they will not happen when debugging is disabled. For instance:assert(x = gets);
will not read a line and not assign to x when debugging is disabled.