mirror of
https://github.com/xcat2/xNBA.git
synced 2024-12-14 07:11:32 +00:00
Force syntax-checking on assertions even in non-asserting builds.
This commit is contained in:
parent
3e0286dee3
commit
2e41bfd268
@ -10,6 +10,25 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef NDEBUG
|
||||
#define ASSERTING 0
|
||||
#else
|
||||
#define ASSERTING 1
|
||||
#endif
|
||||
|
||||
/** printf() for assertions
|
||||
*
|
||||
* This function exists so that the assert() macro can expand to
|
||||
* printf() calls without dragging the printf() prototype into scope.
|
||||
*
|
||||
* As far as the compiler is concerned, assert_printf() and printf() are
|
||||
* completely unrelated calls; it's only at the assembly stage that
|
||||
* references to the assert_printf symbol are collapsed into references
|
||||
* to the printf symbol.
|
||||
*/
|
||||
extern int __attribute__ (( format ( printf, 1, 2 ) ))
|
||||
assert_printf ( const char *fmt, ... ) asm ( "printf" );
|
||||
|
||||
/**
|
||||
* Assert a condition at run-time.
|
||||
*
|
||||
@ -21,10 +40,10 @@
|
||||
*/
|
||||
#define assert( condition ) \
|
||||
do { \
|
||||
if ( ! (condition) ) { \
|
||||
printf ( "assert(%s) failed at %s line %d [%s]\n", \
|
||||
#condition, __FILE__, __LINE__, \
|
||||
__FUNCTION__ ); \
|
||||
if ( ASSERTING && ! (condition) ) { \
|
||||
assert_printf ( "assert(%s) failed at %s line " \
|
||||
"%d [%s]\n", #condition, __FILE__, \
|
||||
__LINE__, __FUNCTION__ ); \
|
||||
} \
|
||||
} while ( 0 )
|
||||
|
||||
@ -44,9 +63,4 @@
|
||||
error_symbol(); \
|
||||
}
|
||||
|
||||
#ifdef NDEBUG
|
||||
#undef assert
|
||||
#define assert(x) do {} while ( 0 )
|
||||
#endif
|
||||
|
||||
#endif /* _ASSERT_H */
|
||||
|
Loading…
Reference in New Issue
Block a user