X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=includes%2Fassert.h;h=a1af59f6aa2eed19e5dd4cce546db0109f8ad85e;hp=ca0022d9d03401e489f480c96c6d887e158c6d81;hb=da0f3f353d417fed71f358a48d5d5394145e460d;hpb=1cc4363093c919f79eafac209bb5c41548d3f88f diff --git a/includes/assert.h b/includes/assert.h index ca0022d..a1af59f 100644 --- a/includes/assert.h +++ b/includes/assert.h @@ -1,21 +1,49 @@ -/* $Id$ */ - -/* 7.2 Diagnostics +/* Diagnostics This file is part of the Public Domain C Library (PDCLib). Permission is granted to use, modify, and / or redistribute at will. */ +#include "_PDCLIB_aux.h" +#include "_PDCLIB_config.h" + +/* + Defines a macro assert() that, depending on the value of the preprocessor + symbol NDEBUG, does + * evaluate to a void expression if NDEBUG is set OR the parameter expression + evaluates to true; + * print an error message and terminates the program if NDEBUG is not set AND + the parameter expression evaluates to false. + The error message contains the parameter expression, name of the source file + (__FILE__), line number (__LINE__), and (from C99 onward) name of the function + (__func__). + The header can be included MULTIPLE times, and redefines the macro depending + on the current setting of NDEBUG. +*/ + #ifndef _PDCLIB_ASSERT_H #define _PDCLIB_ASSERT_H _PDCLIB_ASSERT_H -#include <_PDCLIB_aux.h> -#include <_PDCLIB_config.h> -_PDCLIB_BEGIN_EXTERN_C + +#ifdef __cplusplus +extern "C" { +#endif /* Functions _NOT_ tagged noreturn as this hampers debugging */ void _PDCLIB_assert99( char const * const, char const * const, char const * const ); void _PDCLIB_assert89( char const * const ); +#ifdef __cplusplus +} +#endif + +#if _PDCLIB_C_VERSION >= 2011 +#define static_assert _Static_assert +#else +#define static_assert( e, m ) +#endif + +#endif + /* If NDEBUG is set, assert() is a null operation. */ #undef assert @@ -29,8 +57,10 @@ void _PDCLIB_assert89( char const * const ); ", file " __FILE__ \ ", line " _PDCLIB_symbol2string( __LINE__ ) \ "." _PDCLIB_endl ); \ + _PDCLIB_UNREACHABLE; \ } \ } while(0) + #else #define assert(expression) \ do { if(!(expression)) { \ @@ -38,10 +68,7 @@ void _PDCLIB_assert89( char const * const ); ", file " __FILE__ \ ", line " _PDCLIB_symbol2string( __LINE__ ) \ "." _PDCLIB_endl ); \ + _PDCLIB_UNREACHABLE; \ } \ } while(0) #endif - -_PDCLIB_END_EXTERN_C -#endif -