/* Copyright (c) 1990 Regents of the University of California. All rights reserved. */ /* FUNCTION <>---macro for debugging diagnostics INDEX assert SYNOPSIS #include void assert(int <[expression]>); DESCRIPTION Use this macro to embed debuggging diagnostic statements in your programs. The argument <[expression]> should be an expression which evaluates to true (nonzero) when your program is working as you intended. When <[expression]> evaluates to false (zero), <> calls <>, after first printing a message showing what failed and where: . Assertion failed: <[expression]>, file <[filename]>, line <[lineno]>, function: <[func]> If the name of the current function is not known (for example, when using a C89 compiler that does not understand __func__), the function location is omitted. The macro is defined to permit you to turn off all uses of <> at compile time by defining <> as a preprocessor variable. If you do this, the <> macro expands to . (void(0)) RETURNS <> does not return a value. PORTABILITY The <> macro is required by ANSI, as is the behavior when <> is defined. Supporting OS subroutines required (only if enabled): <>, <>, <>, <>, <>, <>, <>, <>, <>. */ #include #include #include #ifndef _HAVE_ASSERT_FUNC /* func can be NULL, in which case no function information is given. */ void __assert_func (const char *file, int line, const char *func, const char *failedexpr) { fprintf(stderr, "assertion \"%s\" failed: file \"%s\", line %d%s%s\n", failedexpr, file, line, func ? ", function: " : "", func ? func : ""); abort(); /* NOTREACHED */ } #endif /* _HAVE_ASSERT_FUNC */ void __assert (const char *failedexpr, const char *file, int line) { __assert_func (file, line, NULL, failedexpr); /* NOTREACHED */ }