自定义自己平台的Asserter工具的宏定义
概要
书接上回,项目开始定义了一些系统的平台参数,具体可参见下面的文章:C++ 项目成长 —— 定义跨平台的参数宏的文件记录。
同时,在上次我们尝试去定义了一些编译选项自定义的宏,来控制不同的编译选项的时候,能够做一些区分,具体可以参考下面的文章:C++ 项目成长 —— 自定义编译参数宏,区分编译选项
上回说到一下关于自定义一些自己项目中所用到的数据类型,那么可以参考上次的文章:
C++ 项目成长 ——自定义数据类型,定义各种类型别名, typedef的部分用法实例
之后又,我们定义了一些类型之后,有时候会在项目中,需要去动态调试一些情况,判断是否存在空指针,最终得到的某些结果是否是我们期望的判断条件等,那么可以参考上次的文章:C++ 项目成长 —— 自定义系统中使用的Assert工具,类似Q_ASSERT的简化版
今天就在上次定义的Assert类的基础上,来编写一个利用Asserter的一些宏,比如TZ_ASSERT, TZ_FAIL_ONCE()的一些工具,具体代码如下所示:
TZOpenTools
tzsofts_debug_utils.h
///
// Copyright (c) 2021, Tom Zhao personal. ("TZOpenTools")
// This software is a personal tools project by Tom Zhao.
// Description:
///
#ifndef _TZSOFTS_DEBUG_UTILS_H_H_
#define _TZSOFTS_DEBUG_UTILS_H_H_
#include "zsofts_compiler_specific.h"
#include "zsofts_types.h"
// String maker macros
#define _TZ_MAKESTR(x) #x
#define TZ_MAKESTR(x) _TZ_MAKESTR(x)
#define _TZ_MAKESTRW(x) TZ_T(#x)
#define TZ_MAKESTRW(x) _TZ_MAKESTRW(x)
# if TZ_PHASE <= TZ_UNITT_PHASE
# include "tzsofts_assert.h"
# define TZ_FAIL() TzSoft::Asserter(TZ_T("Invalid Execution."), TZ_T(__FILE__), __LINE__)
# define TZ_FAIL_ONCE() \
{ \
static bool s_bFailedAlready = false; \
if (!s_bFailedAlready) \
{ \
s_bFailedAlready = true; \
TZ_FAIL(); \
} \
}
# define TZ_ASSERT(exp) ((exp) || (TzSoft::Asserter(TZ_T(#exp), TZ_T(__FILE__), __LINE__), 0))
# define TZ_ASSERT_ONCE(exp) \
{ \
static bool s_bAssertAlready = false; \
if (!s_bAssertAlready && ! (exp)) \
{ \
s_bAssertAlready = true; \
TzSoft::Asserter(TZ_T(#exp), TZ_T(__FILE__), __LINE__); \
} \
}
# define TZ_VERIFY(exp) TZ_ASSERT(exp)
# include "tzsofts_trace_util.h"
# define TZ_TRACE TzSoft::Tracer
# define TZ_TRACE0(szFormat) TzSoft::Tracer(szFormat)
# define TZ_TRACE1(szFormat, param1) TzSoft::Tracer(szFormat, param1)
# define TZ_TRACE2(szFormat, param1, param2) TzSoft::Tracer(szFormat, param1, param2)
# define TZ_TRACE3(szFormat, param1, param2, param3) TzSoft::Tracer(szFormat, param1, param2, param3)
# elif TZ_PAHSE <= TZ_ALPHA_PHASE
# define TZ_FAIL()
# define TZ_FAIL_ONCE()
# define TZ_ASSERT(exp)
# define TZ_ASSERT_ONCE(exp)
# define TZ_VERIFY(exp) TZ_ASSERT(exp)
# define TZ_TRACE
# define TZ_TRACE0(szFormat)
# define TZ_TRACE1(szFormat, param1)
# define TZ_TRACE2(szFormat, param1, param2)
# define TZ_TRACE3(szFormat, param1, param2, param3)
#else
# define TZ_FAIL()
# define TZ_FAIL_ONCE()
# define TZ_ASSERT(exp)
# define TZ_ASSERT_ONCE(exp)
# define TZ_VERIFY(exp) (exp)
# define TZ_TRACE
# define TZ_TRACE0(szFormat)
# define TZ_TRACE1(szFormat, param1)
# define TZ_TRACE2(szFormat, param1, param2)
# define TZ_TRACE3(szFormat, param1, param2, param3)
# endif
#if (TZ_COMPILER == TZ_COMILER_MSVC) && (TZ_BUILD_MODE == TZ_BUILD_DEBUG)
# pragma warning (disable:4081)
# define TZ_MAKEMESSAGE(desc) message(__FILE__ "(" TZ_MAKESTR ") :" #desc)
#elif defined(__sun) && TZ_COMPILER != TZ_COMPILER_GUNC
# define TZ_MAKEMESSAGE(desc) dummy_pragma
#else
# define TZ_MAKEMESSAGE(desc) message(#desc)
#endif
#endif // _TZSOFTS_DEBUG_UTILS_H_H
个人格言
用心去感受你自己需要坚持的生活,未来慢慢会给你答案的。