#ifndef XDEBUG /* prevent circular inclusions */ #define XDEBUG /* by using protection macros */ #ifdef __cplusplus extern "C" { #endif #if defined(DEBUG) && !defined(NDEBUG) #ifndef XDEBUG_WARNING #define XDEBUG_WARNING #warning DEBUG is enabled #endif int printf(const char *format, ...); #define XDBG_DEBUG_ERROR 0x00000001U /* error condition messages */ #define XDBG_DEBUG_GENERAL 0x00000002U /* general debug messages */ #define XDBG_DEBUG_ALL 0xFFFFFFFFU /* all debugging data */ #define xdbg_current_types (XDBG_DEBUG_GENERAL) #define xdbg_stmnt(x) x #define xdbg_printf(type, ...) (((type) & xdbg_current_types) ? printf (__VA_ARGS__) : 0) #else /* defined(DEBUG) && !defined(NDEBUG) */ #define xdbg_stmnt(x) #define xdbg_printf(...) #endif /* defined(DEBUG) && !defined(NDEBUG) */ #ifdef __cplusplus } #endif #endif /* XDEBUG */