1 // Copyright (c) 1994 James Clark 2 // See the file COPYING for copying permission. 3 #pragma ident "%Z%%M% %I% %E% SMI" 4 5 #ifndef macros_INCLUDED 6 #define macros_INCLUDED 1 7 8 #ifndef __GNUG__ 9 #define __attribute__(args) /* as nothing */ 10 #endif 11 12 #ifdef NDEBUG 13 14 #include <stdlib.h> 15 #define ASSERT(expr) ((void)0) 16 #define CANNOT_HAPPEN() ((void)abort()) 17 18 #else /* not NDEBUG */ 19 20 #ifdef SP_NAMESPACE 21 namespace SP_NAMESPACE { 22 #endif 23 extern SP_API void assertionFailed(const char *, const char *, int) 24 __attribute__((noreturn)); 25 #ifdef SP_NAMESPACE 26 } 27 #endif 28 29 #define ASSERT(expr) \ 30 ((void)((expr) || \ 31 (::SP_NAMESPACE_SCOPE assertionFailed(# expr, __FILE__, __LINE__), 0))) 32 #define CANNOT_HAPPEN() ASSERT(0) 33 34 #endif /* not NDEBUG */ 35 36 #define SIZEOF(v) (sizeof(v)/sizeof(v[0])) 37 38 #endif /* not macros_INCLUDED */ 39