C++ 项目成长 —— 自定义自己平台的Asserter工具的宏定义

27 篇文章 0 订阅
16 篇文章 0 订阅

自定义自己平台的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

个人格言

    用心去感受你自己需要坚持的生活,未来慢慢会给你答案的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值