Badminton-Scoreboard/Libraries/external/baselib/Include/Internal/Assert.h
2023-10-08 10:24:48 +08:00

48 lines
2.5 KiB
C

#pragma once
#ifndef BASELIB_ENABLE_ASSERTIONS
#ifdef NDEBUG
#define BASELIB_ENABLE_ASSERTIONS 0
#else
#define BASELIB_ENABLE_ASSERTIONS 1
#endif
#endif
#include "../C/Baselib_Debug.h"
#ifdef __cplusplus
BASELIB_C_INTERFACE
{
#endif
#if COMPILER_CLANG || COMPILER_GCC
__attribute__((format(printf, 1, 2)))
#endif
BASELIB_API void detail_AssertLog(const char* format, ...);
#define DETAIL__ASSERT_LOG(ASSERT_EXPRESSION_, message, ...) \
PP_EVAL(PP_IF_ELSE(PP_VARG_IS_NONEMPTY(__VA_ARGS__)) \
(detail_AssertLog("%s(%d): Assertion failed (%s) - " message "\n", __FILE__, __LINE__, #ASSERT_EXPRESSION_, __VA_ARGS__)) \
(detail_AssertLog("%s(%d): Assertion failed (%s) - %s\n", __FILE__, __LINE__, #ASSERT_EXPRESSION_, message)) \
)
#define BaselibAssert(ASSERT_EXPRESSION_, ...) \
do { \
if (BASELIB_ENABLE_ASSERTIONS) \
{ \
if(!(ASSERT_EXPRESSION_)) \
{ \
PP_EVAL(PP_IF_ELSE(PP_VARG_IS_NONEMPTY(__VA_ARGS__)) \
(DETAIL__ASSERT_LOG(ASSERT_EXPRESSION_, __VA_ARGS__)) \
(detail_AssertLog("%s(%d): Assertion failed (%s)\n", __FILE__, __LINE__, #ASSERT_EXPRESSION_)) \
); \
Baselib_Debug_Break(); \
} \
} \
} while(0)
#ifdef __cplusplus
} // BASELIB_C_INTERFACE
#endif