1 | /* |
---|
2 | FUNCTION |
---|
3 | <<assert>>---macro for debugging diagnostics |
---|
4 | |
---|
5 | INDEX |
---|
6 | assert |
---|
7 | |
---|
8 | SYNOPSIS |
---|
9 | #include <assert.h> |
---|
10 | void assert(int <[expression]>); |
---|
11 | |
---|
12 | DESCRIPTION |
---|
13 | Use this macro to embed debuggging diagnostic statements in |
---|
14 | your programs. The argument <[expression]> should be an |
---|
15 | expression which evaluates to true (nonzero) when your program |
---|
16 | is working as you intended. |
---|
17 | |
---|
18 | When <[expression]> evaluates to false (zero), <<assert>> |
---|
19 | calls <<abort>>, after first printing a message showing what |
---|
20 | failed and where: |
---|
21 | |
---|
22 | . Assertion failed: <[expression]>, file <[filename]>, line <[lineno]>, function: <[func]> |
---|
23 | |
---|
24 | If the name of the current function is not known (for example, |
---|
25 | when using a C89 compiler that does not understand __func__), |
---|
26 | the function location is omitted. |
---|
27 | |
---|
28 | The macro is defined to permit you to turn off all uses of |
---|
29 | <<assert>> at compile time by defining <<NDEBUG>> as a |
---|
30 | preprocessor variable. If you do this, the <<assert>> macro |
---|
31 | expands to |
---|
32 | |
---|
33 | . (void(0)) |
---|
34 | |
---|
35 | RETURNS |
---|
36 | <<assert>> does not return a value. |
---|
37 | |
---|
38 | PORTABILITY |
---|
39 | The <<assert>> macro is required by ANSI, as is the behavior |
---|
40 | when <<NDEBUG>> is defined. |
---|
41 | |
---|
42 | Supporting OS subroutines required (only if enabled): <<close>>, <<fstat>>, |
---|
43 | <<getpid>>, <<isatty>>, <<kill>>, <<lseek>>, <<read>>, <<sbrk>>, <<write>>. |
---|
44 | */ |
---|
45 | |
---|
46 | #include <assert.h> |
---|
47 | #include <stdlib.h> |
---|
48 | #include <stdio.h> |
---|
49 | |
---|
50 | #ifndef HAVE_ASSERT_FUNC |
---|
51 | /* func can be NULL, in which case no function information is given. */ |
---|
52 | void |
---|
53 | __assert_func (const char *file, |
---|
54 | int line, |
---|
55 | const char *func, |
---|
56 | const char *failedexpr) |
---|
57 | { |
---|
58 | fiprintf(stderr, |
---|
59 | "assertion \"%s\" failed: file \"%s\", line %d%s%s\n", |
---|
60 | failedexpr, file, line, |
---|
61 | func ? ", function: " : "", func ? func : ""); |
---|
62 | abort(); |
---|
63 | /* NOTREACHED */ |
---|
64 | } |
---|
65 | #endif /* HAVE_ASSERT_FUNC */ |
---|
66 | |
---|
67 | void |
---|
68 | __assert (const char *file, |
---|
69 | int line, |
---|
70 | const char *failedexpr) |
---|
71 | { |
---|
72 | __assert_func (file, line, NULL, failedexpr); |
---|
73 | /* NOTREACHED */ |
---|
74 | } |
---|