diff options
Diffstat (limited to 'src/assert/assert.c')
-rw-r--r-- | src/assert/assert.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/assert/assert.c b/src/assert/assert.c new file mode 100644 index 00000000..65e4ea6e --- /dev/null +++ b/src/assert/assert.c @@ -0,0 +1,44 @@ +#include <assert.h> + +#undef assert + +#ifdef NDEBUG + +#define assert(ignore) ((void)0) + +#else + +#if __STDC_VERSION__ < 199901L +#define __func__ ((char*)0) +#endif + +#define assert(__exp__) \ + ((void)(__exp__ ? 0 : __assert(#__exp__, __FILE__, __LINE__, __func__))) + +#endif + +/* in c89 - void assert(int expression); */ +/* in c99 - void assert(/scalar/ expression); */ + +/** insert program diagnostics **/ + +/*** +adds mandatory checks to programs. If ARGUMENT(expression) is false, +FUNCTION(assert) prints a diagnostic message to IDENTIFIER(stderr). The +message includes the text of the failed assertion as well as the file name and +line number of the source where the assertion failed. Compilers supporting +std(C99) or higher will also include the name of the function in which the +assertion failed. After printing the diagnostic message, THIS() +causes abnormal program termination by calling FUNCTION(abort). + +If the macro IDENTIFIER(NDEBUG) is defined, THIS() is +defined as DEFINITION(((void)0)). +***/ + +/* +PROTOTYPE(void assert(int expression);) +IMPLEMENTATION(The format of the diagnostic message, TODO: document this here) +UNDEFINED(The THIS() macro is suppressed) +UNDEFINED(ARGUMENT(expression) does not have a scalar type) +STDC(1) +*/ |